haskell - Pattern matching error on instance declaration -
i need declare monad instance specific info type:
data m m = mk (m (maybe a)) instance (monad m) => monad (m m) homecoming x = mk (m (just x)) mk (m (nothing)) >>= f = mk (m (nothing)) mk (m (just x)) >>= f = f x but get:
test.hs:6:7: parse error in pattern: m failed, modules loaded: none. it may simple, cant figure out!
the type variable m not can pattern match on, not in order distinguish between just , nothing. think mean different possible types used in place of m--in many cases, such pattern match outright impossible.
to write instance, you'll need this:
instance (monad m) => monad (m m) homecoming x = mk (return (just x)) mk mx >>= f = -- ?? note return used create value of type m (maybe a)--that's possible because of monad m constraint, , in general case (with no constraint @ all) there'd no way create such value.
to implement (>>=) you'll need similar, likewise making utilize of (>>=) monad instance of m.
incidentally, should consider using newtype m, unless have specific reason wanting data. of time, if can utilize newtype, should.
haskell instance monads
No comments:
Post a Comment