如何在Haskell中从一个无点的值中获取两个值?

如何在Haskell中从一个无点的值中获取两个值?,haskell,Haskell,例如,给定一个值,v和一个函数f,是否有办法获得(f v,v)自由点?或者,请注意,对于具有适当类型的函数h和f import Control.Arrow (g &&& f) v = (g v, f v) -- ergo, (id &&& f) v = (v, f v) (f &&& id) v = (f v, v) h >>= f = \w -> f (h w) w 这样你就可以写作了 f >&

例如,给定一个值,
v
和一个函数
f
,是否有办法获得
(f v,v)
自由点?

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

import Control.Arrow
(g &&& f) v = (g v, f v)
-- ergo,
(id &&& f) v = (v, f v)
(f &&& id) v = (f v, v)
h >>= f = \w -> f (h w) w
这样你就可以写作了

f >>= (,)

使用
(>)

比如说

liftA2 (,) id succ 5

>>> (5,6)

或者,也可以从
Control.Arrow
first
second
中选择。我不认为这是元组部分,我认为这是标准的。我喜欢这样,因为它避免了导入。
liftA2 (,) id succ 5

>>> (5,6)