Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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与原始复制_Haskell_Ghc - Fatal编程技术网

Haskell liftM与原始复制

Haskell liftM与原始复制,haskell,ghc,Haskell,Ghc,产生 replicate 3 "hi" liftM (replicate 3) "hi" 但是 产生 replicate 3 "hi" liftM (replicate 3) "hi" liftM如何(精确地)操作?liftM功能是fmap*的另一个名称,它在列表上操作时相当于map ["hhh", "iii"] liftM(复制3)“嗨” =[复制3 x | x摘要:liftM=map liftM函数的类型为Monad m=>(a->b)->ma->mb。也就是说,它接受Monad

产生

replicate 3 "hi"
liftM (replicate 3) "hi"
但是

产生

replicate 3 "hi"
liftM (replicate 3) "hi"

liftM
如何(精确地)操作?

liftM功能是
fmap
*的另一个名称,它在列表上操作时相当于
map

["hhh", "iii"]
liftM(复制3)“嗨”

=[复制3 x | x摘要:
liftM=map



liftM
函数的类型为
Monad m=>(a->b)->ma->mb
。也就是说,它接受Monad中的一个函数和一些东西,并“通过”Monad应用函数。(或者,从另一个角度看,它的类型为
Monad m=>(a->b)->(ma->mb
,即它将一个函数转换为一个通过单子操作的函数。)

在本例中,我们有
liftM(replicate 3)['h','i']
(记住
“hi”
只是单个字符列表的简写),因此所讨论的单子就是列表单子。
liftM
对于列表的定义相当于
map
(这两个函数的类型相同,这是一个很大的提示。)因此:

liftM (replicate 3) ['h','i'] = map (replicate 3) ['h','i']
     = [replicate 3 'h', replicate 3 'i'] = ["hhh","iii"]