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

时间:2014-10-08 21:31:57

标签: haskell

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

3 个答案:

答案 0 :(得分:13)

或者,请注意,对于具有适当类型的函数hf

h >>= f = \w -> f (h w) w

所以你可以写

f >>= (,)

答案 1 :(得分:11)

import Control.Arrow
(g &&& f) v = (g v, f v)
-- ergo,
(id &&& f) v = (v, f v)
(f &&& id) v = (f v, v)

答案 2 :(得分:5)

如何使用Applicative

(->)实例
liftA2 (,) id :: (a -> b) -> a -> (a, b)

例如

liftA2 (,) id succ 5

>>> (5,6)