【发布时间】:2016-03-12 02:07:22
【问题描述】:
如何进行从Control.Monad.liftM not 到Control.Monad.liftM not id 的类型推断?
(Control.Monad.liftM not) :: Monad m => m Bool -> m Bool
(Control.Monad.liftM not id) :: Bool -> Bool
【问题讨论】:
-
诀窍是意识到在第二种情况下,
m被实例化为一个具体类型——即函数 monad((->) x。推理过程相当简单:liftM not的参数类型为m Bool和id :: a -> a,因此a -> a ~ m Bool,您可以从中得到m ~ ((->) a), a ~ Bool。