【发布时间】:2011-02-22 01:37:38
【问题描述】:
假设我有两个类型类定义如下,它们的功能相同但名称不同:
class Monad m where
(>>=) :: m a -> (a -> m b) -> m b
return :: a -> m a
class PhantomMonad p where
pbind :: p a -> (a -> p b) -> p b
preturn :: a -> p a
有没有办法将这两个类联系在一起,这样 PhantomMonad 的实例就会自动成为 Monad 的实例,或者每个类的实例都必须显式编写?任何见解将不胜感激,谢谢!
【问题讨论】:
-
preturn :: a -> p b是错字吗?