- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
foldMap 可以通过遍历来实现:
foldMap f = getConst . traverse (Const . f)
所以,我的问题是如何通过foldMap实现遍历:
traverse f = ...
或者
it Can't be accomplished ?
最佳答案
有一些 Foldable
实例无法完成此操作。
data Blonk a = Blink | Blank
instance Functor Blonk where
fmap f Blink = Blink
fmap f Blank = Blank
instance Foldable Blonk where
foldMap f _ = mempty
以上是 Blonk
的 Functor
和 Foldable
唯一可能的完整、守法的实现。现在有一条关于Traversable
的法则:
traverse Identity = Identity
让我们看看它是如何发挥作用的,假设traverse
是用foldMap
实现的,也就是说,有一些术语g
和 h
(如果愿意,可以提及 f
):
traverse f = g . foldMap h
然后:
traverse f x = g (foldMap h x)
= g mempty
-- THEREFORE
traverse Identity x = g mempty
请注意,g mempty
不依赖于 x
,因此必须是 Identity Blink
或 Identity Blank
以适合类型。在前一种情况下,
traverse Identity Blank = Identity Blink
!= Identity Blank
并且违反了法律。同样,traverse Identity Blink
是另一起案件中违法行为的证人。
(并且,为了证明我没有采取任何手段,有一个守法的 Traversable
实例:
instance Traversable Blonk where
traverse f Blink = pure Blink
traverse f Blank = pure Blank
)
关于haskell - 如何使用foldMap实现遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093699/
(这是 Typeclassopedia 中的练习。) 如何计算两个非平凡函数的组合类型,例如 foldMap . foldMap ? 对于简单的情况,这很容易:只需查看 (.) 的类型即可。 (.)
这段代码编译: import Data.List (isPrefixOf) import Data.Monoid (Any(..)) import Data.Coerce isRoot :: Stri
我正在尝试编写自己的 foldMap 函数作为学习 Haskell 的练习 目前它看起来像这样 class Functor f => Foldable f where fold :: M
我是 Haskell 的新手,我有点卡住了 data Tree a = Empty | Leaf a | Branch a (Tree a) (Tree a) deriving (Show)
我想用 foldr 或 foldMap 实现最小值。根据练习,它应该有这个定义: mini :: (Foldable t, Ord a) => t a -> Maybe a -- named "min
我正在尝试编写一个扁平化嵌套列表的函数。 编码: data NestedList a = Elem a | List [NestedList a] flatten :: NestedList a ->
foldr 和 foldMap 据我了解,可以用来定义彼此。但这怎么可能,因为后者使用幺半群,而前者却没有?我们有任何保证 foldr 的东西吗?可以有一个幺半群吗? 最佳答案 foldr :: (a
有人可以解释类型的含义以及如何实现吗? class Foldable f where foldMap :: (Monoid m) => (a -> m) -> f a -> m 基于 https:
我是 Haskell 的初学者,正在从“Learn You a Haskell”学习。 我不明白 Foldable 的 Tree 实现。 instance F.Foldable Tree where
我正在移植 this package到 Java,并试图解决两种语言之间懒惰/急切的不和谐而陷入困境。我不认为它会像现在这样严重,因为实现完全取决于函数类型,但我想我错了。我如何保持足够的懒惰来让它工
我最近read about recursion schemes其中变质被描述为类似于广义foldr . 是否可以编写 Foldable 的实例(通过 foldr 或 foldMap )根据 cata在
我是一名优秀的程序员,十分优秀!