如何从Haskell中获得一个免费的两个值?

גלע*_*רקן 6 haskell

例如,给定一个值,v和一个函数f,有没有办法让(f v,v)点免费?

dfe*_*uer 13

或者,请注意功能hf适当类型,

h >>= f = \w -> f (h w) w
Run Code Online (Sandbox Code Playgroud)

所以你可以写

f >>= (,)
Run Code Online (Sandbox Code Playgroud)

  • 我认为这不是一个元组部分,我认为这是标准的. (4认同)

chi*_*chi 11

import Control.Arrow
(g &&& f) v = (g v, f v)
-- ergo,
(id &&& f) v = (v, f v)
(f &&& id) v = (f v, v)
Run Code Online (Sandbox Code Playgroud)

  • 或者,也来自`Control.Arrow`,`first`和`second`. (4认同)

dan*_*iaz 5

如何使用Applicative实例(->)

liftA2 (,) id :: (a -> b) -> a -> (a, b)
Run Code Online (Sandbox Code Playgroud)

例如

liftA2 (,) id succ 5

>>> (5,6)
Run Code Online (Sandbox Code Playgroud)