【发布时间】:2016-03-01 10:25:12
【问题描述】:
我从列表中知道的大多数方法实际上都是一些知名类型类的特例。一些方法和相关类型类的例子:
-
map :: (a -> b) -> [a] -> [b]和Functor -
foldr :: (a -> b -> b) -> b -> [a] -> b和Foldable -
forM :: Monad m => [a] -> (a -> m b) -> m [b]和Traversable -
concat :: [[a]] -> [a]和Monad
可能这个列表还在继续(请原谅双关语)。
我想知道unzip :: [(a, b)] -> ([a], [b]) 背后的“深层含义”。它可以使用[] 的一些著名实例来实现吗,例如(,a) 的仿函数实例?还是其他一些情况?理想情况下,我希望这种类型有一个更抽象的函数:SomeClass m => unzip :: m (a, b) -> (m a, m b)。是否有课程可以完成这项工作?
【问题讨论】:
-
相关:zip 背后的“深层含义”是right adjoint。