【问题标题】:Haskell type inference about monad关于 monad 的 Haskell 类型推断
【发布时间】:2016-03-12 02:07:22
【问题描述】:

如何进行从Control.Monad.liftM notControl.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 Boolid :: a -> a,因此a -> a ~ m Bool,您可以从中得到m ~ ((->) a), a ~ Bool

标签: haskell types monads


【解决方案1】:
liftM not    :: Monad m =>                 m Bool -> m Bool
id           ::                            a -> a
liftM not id :: (Monad m, m ~ ((->) a), a ~ Bool) => m Bool
           {- therefore -}                           Bool -> Bool

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多