
On Wed, Jan 21, 2009 at 11:51:26PM +0100, Daniel Fischer wrote:
I think you can't. If it's possible, the best option would be to change the order of type parameters of Sample. If that's not possible, you can define
newtype FSample b a = FS (Sample a b)
and make that an instance of Monad.
Right, Haskell doesn't allow partially applied type synonyms, but partially applied newtypes are fine. It will just be a bit annoying having the FS constructor tags everywhere. Switching the order of the parameters to Sample would be the best option.
Somebody remind me, why does Haskell not have type-lambdas?
Because type-lambdas would require higher-order unification during type checking, which is in general undecidable. Without type lambdas, if you have to unify two type applications like f a == m b then you know that f == m and a == b. But with type lambdas this might not be the case. For example, you could have f == \x -> [x], a = Int, m = \x -> x, and b = [Int]. -Brent