data (Ord a) => Stree a = Null
| Fork (Stree a) a (Stree a)
mkStree :: (Ord a) => [a] -> Stree a
mkStree [] = Null
mkStree (x:xs) = Fork (mkStree smaller) x (mkStree larger)
where (smaller,larger) = partition (<= x) xs
partition :: (a->Bool) -> [a] -> ([a],[a])
partition p xs = ([ x | x <- xs, p x],
[ y | y <- xs, (not . p) y])
how can i fix this failure --> Ambiguous class occurrence "Ord" * Could refer to: Hugs.Prelude.Ord
I cannot reproduce this error, but I can take some guesses. The "Ambiguous class occurrence" error means that there is more than one definition of "Ord" in scope, so the real problem is not in the code you've included here. The problem is either that one of the modules you're importing redefines "Ord" for some reason, or you're redefining it in your code. Either way, the only way that can work is if other definitions (such as the default one in the Prelude) are hidden or qualified. If you're trying to use a non-standard Ord implementation, you'll need to import the Prelude hiding Ord:
import Prelude hiding(Ord)
If you're not intentionally using a non-standard Ord, then you'll need to figure out where the second one is coming from and remove or hide it. There's not enough information in your question for me to be able to say how to do so, though. I would expect the error message is also longer than what you've listed here, as it should show the location of both definitions of Ord.