0
如何從Control.Monad.liftM not
到Control.Monad.liftM not id
的類型進行類型推斷?有關單子的Haskell類型推斷
(Control.Monad.liftM not) :: Monad m => m Bool -> m Bool
(Control.Monad.liftM not id) :: Bool -> Bool
如何從Control.Monad.liftM not
到Control.Monad.liftM not id
的類型進行類型推斷?有關單子的Haskell類型推斷
(Control.Monad.liftM not) :: Monad m => m Bool -> m Bool
(Control.Monad.liftM not id) :: Bool -> Bool
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
訣竅是認識到在第二情況下,'M'被實例化到一個具體類型 - 即給函數單子'(( - >)x'推理進行相當簡單。 :'liftM not'的參數的類型爲'm Bool'和'id :: a - > a',所以'a - > a〜m Bool',從中你可以得到m〜(( - >)a) ,a〜Bool'。 – user2407038
明白了!謝謝! – jim