haskell - liftM 与原始复制

标签 haskell ghc

replicate 3 "hi"

产生

["hi", "hi", "hi"]

但是

liftM (replicate 3) "hi"

产生

["hhh", "iii"]

liftM 是如何(精确地)运行的?

最佳答案

liftM 函数是 fmap* 的另一个名称,在操作时相当于 map列表。

liftM (replicate 3) "hi"
  = [replicate 3 x | x <- "hi"]
  = [replicate 3 'h', replicate 3 'i']
  = ["hhh", "iii"]

脚注

* liftMfmap 之间的区别是不同的类上下文,因为由于历史原因,Monad > 并不暗示仿函数

关于haskell - liftM 与原始复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13186328/

相关文章:

Haskell Aeson 如何基于 `Value` 类型而不是 `ByteString` 进行解码/解析?

Haskell 语言报告 : definition of reservedid

haskell - 多态函数的特化

haskell - 如何在本地使用 UndecidableInstances?

haskell - 通过 Cabal 从 Hackage 安装 Haskell 包陷入依赖解析

haskell - 无法使用堆栈 LTS 19.2 (GHC 9.0.2) 分析构建

unicode - 带有非英文字符的 Haskell IO

authentication - 如何在没有电子邮件确认的情况下使用 Yesod.Auth.Email?

来自函数所需实例声明的 Haskell 类型上下文

haskell - 用haskell匹配正整数