如何映射Pair/Tuple?
How to map over a Pair/Tuple?
在Haskell我会做join (***)
。在 Idris 中 flatten (***)
不起作用((***)
很复杂)。
在 Idris 中,r -> _
没有 Functor
/Applicative
/Monad
个实例,->
也没有 Arrow
个实例,只有通过 Morphism
,所以使用 flatten
来执行 \f x -> f x x
会导致非常冗长的代码充满 from/to Morphism
。
你可以做,当然,我只是不确定它是否值得...比较一下:
import Control.Arrow
import Data.Morphisms
both : (a -> b) -> (a, a) -> (b, b)
both = applyMor . applyMor (flatten (Mor (Mor . (***)))) . Mor
对此:
both : (a -> b) -> (a, a) -> (b, b)
both f (x, y) = (f x, f y)
在Haskell我会做join (***)
。在 Idris 中 flatten (***)
不起作用((***)
很复杂)。
在 Idris 中,r -> _
没有 Functor
/Applicative
/Monad
个实例,->
也没有 Arrow
个实例,只有通过 Morphism
,所以使用 flatten
来执行 \f x -> f x x
会导致非常冗长的代码充满 from/to Morphism
。
你可以做,当然,我只是不确定它是否值得...比较一下:
import Control.Arrow
import Data.Morphisms
both : (a -> b) -> (a, a) -> (b, b)
both = applyMor . applyMor (flatten (Mor (Mor . (***)))) . Mor
对此:
both : (a -> b) -> (a, a) -> (b, b)
both f (x, y) = (f x, f y)