Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell liftM null id返回bool,但bool不是monad_Haskell_Types_Monads - Fatal编程技术网

Haskell liftM null id返回bool,但bool不是monad

Haskell liftM null id返回bool,但bool不是monad,haskell,types,monads,Haskell,Types,Monads,Bool类型不是Monad 然而,下面仍然返回布尔 因此,统一给予 liftM null :: (Monad m, Foldable t) => m (t a) -> m Bool 然后liftM null id必须将类型为b->b的id与m t a统一,其中m是单子,t是可折叠的。碰巧的是,type->r是。这意味着id的类型可以写成mb,其中m是->b 现在,b可以专用于t a,以便我们得到所需的类型: id :: ((->) (t a)) (t a) -- m = ((

Bool类型不是Monad

然而,下面仍然返回布尔

因此,统一给予

liftM null :: (Monad m, Foldable t) => m (t a) -> m Bool
然后liftM null id必须将类型为b->b的id与m t a统一,其中m是单子,t是可折叠的。碰巧的是,type->r是。这意味着id的类型可以写成mb,其中m是->b

现在,b可以专用于t a,以便我们得到所需的类型:

id :: ((->) (t a)) (t a)
-- m = ((->) (t a))
回到liftM null,我们有:

liftM null :: Foldable t => ((->) (t a)) (t a) -> ((->) (t a)) Bool
或者,用通常的中缀->形式写回去

剩下的很清楚-我们将上述函数应用于id以获得

liftM null :: (Monad m, Foldable t) => m (t a) -> m Bool
id :: b -> b
id :: ((->) b) b   -- this is the same as above
-- m = ((->) b)
id :: ((->) (t a)) (t a)
-- m = ((->) (t a))
liftM null :: Foldable t => ((->) (t a)) (t a) -> ((->) (t a)) Bool
liftM null :: Foldable t => (t a -> t a) -> t a -> Bool
liftM null id :: Foldable t => t a -> Bool