Haskell “a”是什么;“应用性转换”;在可遍历性的自然性中?
Haskell “a”是什么;“应用性转换”;在可遍历性的自然性中?,haskell,applicative,traversable,Haskell,Applicative,Traversable,Traversable类中的traverse和sequenceA函数必须满足以下“自然性”法则: t . traverse f == traverse (t . f) t . sequenceA == sequenceA . fmap t 对于每个“应用性转换”t。但这是什么呢 对于t=tail,它似乎不适用于实例可遍历[]: Prelude> tail . sequenceA $ [[1],[2,3]] [[1,3]] Prelude> sequenceA . fmap tail
Traversable
类中的traverse
和sequenceA
函数必须满足以下“自然性”法则:
t . traverse f == traverse (t . f)
t . sequenceA == sequenceA . fmap t
对于每个“应用性转换”t
。但这是什么呢
对于t=tail
,它似乎不适用于实例可遍历[]
:
Prelude> tail . sequenceA $ [[1],[2,3]]
[[1,3]]
Prelude> sequenceA . fmap tail $ [[1],[2,3]]
[]
对于t=join(+)
(重复列表两次)也不适用:
那么,对于他们满意的内容是什么呢?数据的Hackage页面 [A] 应用转换是一个函数
t :: (Applicative f, Applicative g) => f a -> g a
保留应用程序操作,即
t (pure x) = pure x
t (x <*> y) = t x <*> t y
您可以在GHCi中验证您引用的法律是否适用于<代码>反向代码>
reverse (pure x) = reverse [x] = [x] = pure x
-- (the (<*>) law is more difficult to show)
Prelude> reverse . sequenceA $ [[1], [2,3]]
[[1,3],[1,2]]
Prelude> sequenceA . fmap reverse $ [[1], [2,3]]
[[1,3],[1,2]]
来源:数据的黑客页面。Traversable定义了一个应用程序转换,如下所示 [A] 应用转换是一个函数
t :: (Applicative f, Applicative g) => f a -> g a
保留应用程序操作,即
t (pure x) = pure x
t (x <*> y) = t x <*> t y
您可以在GHCi中验证您引用的法律是否适用于<代码>反向代码>
reverse (pure x) = reverse [x] = [x] = pure x
-- (the (<*>) law is more difficult to show)
Prelude> reverse . sequenceA $ [[1], [2,3]]
[[1,3],[1,2]]
Prelude> sequenceA . fmap reverse $ [[1], [2,3]]
[[1,3],[1,2]]
资料来源:《法典》法则更难正式表述,但如果你用《法典》和《法典》地图》来表达它,我认为它至少会在直觉上变得清晰。基本原理是
concat(reverse(map reverse xss))=reverse(concat xss)
。看看几个小例子,任何人都会相信这是真的<代码>反向(concat[[1,2],[3,4,5]])=[5,4,3,2,1]=concat[[5,4,3],[2,1]]=concat(反向(映射反向[[1,2],[3,4,5]])。
法则更难正式表达,但如果你用concat
和map
来表达,我认为它至少会直观地清晰起来。基本原理是concat(reverse(map reverse xss))=reverse(concat xss)
。看看几个小例子,任何人都会相信这是真的<代码>反向(concat[[1,2],[3,4,5]])=[5,4,3,2,1]=concat[[5,4,3],[2,1]]=concat(反向(映射反向[[1,2],[3,4,5]]),例如,数据中需要注意的另一件事。可遍历的
文档是“自然法则是由参数隐含的。”这基本上意味着任何通过类型检查器的遍历
定义都将遵守自然法则;你不必担心。在数据.Traversable
文档中要注意的另一件事是“自然法则由参数隐含”。这基本上意味着通过类型检查器的traverse
的任何定义都将遵守自然法则;你不必担心。