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"]