【发布时间】:2019-02-12 04:12:26
【问题描述】:
我有一些功能
bar :: MyType -> MyType -> [MyType]
我想要另一个功能:
foo :: [MyType] -> [MyType]
foo xs = do x <- xs
y <- xs
bar x y
是否可以在不使用do 符号的情况下编写foo?我在想liftA2 之类的东西,但那行不通。
【问题讨论】:
-
所有的do符号都可以用
>>=和return重写,为此甚至还有一个特殊的使用函数。 -
对,您在技术上是正确的。我真正的意思是,如果我可以使用
Control.Applicative或Control.Monad中的函数以某种自然的方式重写它,并且没有lambda。由>>=重写通常需要许多 lambda。 -
"正在考虑类似 liftA2 的东西,但那行不通。"为什么不呢?
-
@M.Aroosi:注意
bar在这里是一元类型,它不是return (bar x y),而只是bar x y。 -
对,你可以使用
liftA2和jointho。
标签: haskell linked-list monads do-notation