default class method types... (unification)
MR K P SCHUPKE
k.schupke@ic.ac.uk
Fri, 06 Sep 2002 16:46:47 +0100
ah - of course...
so if I have an instance
instance A m m where
f = id
all works well!
I still have a problem though - perhaps it is also possible to avoid...
I am trying to define a parametric continuation monad transformer
(from a paper by Ralf Hinze...) however the functions as given have
type errors... in particular the following (which is similar to the simple
case I just gave)
class (Monad tm,MonadT (t tm)) => MonadT t tm where
up ::tm ta -> t tm ta
down :: t tm a -> tm ta
we define the type for our parametric continuation:
data ContT ans m a = CT ((a -> m ans) -> m ans)
instance Monad m => MonadT (ContT ans) m where
up m = CT $ \kappa -> m >>= kappa
down (CT m) = m return
however this gives a unification error (less polymorphic than expected)
for the definition of down (that `a' is unified with `ans')??
Regards,
Keean Schupke.
Martin Norbäck wrote:
>fre 2002-09-06 klockan 15.01 skrev MR K P SCHUPKE:
>
>>If I have a class:
>>
>>class A m n where
>> f :: m a -> n a
>>
>>I can declare instances
>>
>>instance A Maybe Maybe where
>> f = id
>>
>>instance A [] [] where
>> f = id
>>
>>but if I try and put a default method:
>> f = id
>>
>>I get a unification error (less polymorphic than expected).This seems
>>a little odd - is there a work around for this?
>>
>
>Because that default method only works when m=n, which it's not in the
>general case.
>