如何映射一对/元组?

时间:2015-08-17 06:27:53

标签: tuples idris

在Haskell中我会做join (***)。在Idris中flatten (***)不起作用((***)很复杂)。

1 个答案:

答案 0 :(得分:3)

在Idris中,Functor没有Applicative / Monad / r -> _个实例,Arrow没有->个实例,只能通过Morphism,因此使用flatten执行\f x -> f x x会导致可疑的冗长代码从/到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)