- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写自己的 foldMap 函数作为学习 Haskell 的练习
目前它看起来像这样
class Functor f => Foldable f where
fold :: Monoid m => f m -> m
foldMap :: Monoid m => (a -> m) -> f a -> m
foldMap g a = fold (<>) mempty (fmap g a)
Could not deduce (Monoid ((f m -> m) -> fm -> m)) arising from use of 'fold'
from the context (Foldable f) bound by the class declaration for 'Foldable' at (file location)
or from (Monoid m) bound by the type signature for foldMap :: Monoid m => (a -> m) -> f a -> m at (file location
In the expression fold (<>) mempty (fmap g a)
In an equation for 'foldMap':
foldMap g a = fold (<>) mempty (fmap g a)
最佳答案
也许我们应该用实际的解决方案来做一个回答:
我希望现在很清楚,这是一个可能的定义:
class Functor f => Foldable f where
fold :: Monoid m => f m -> m
foldMap :: Monoid m => (a -> m) -> f a -> m
foldMap g a = fold $ fmap g a
f a -> m
哪里
m
是幺半群且
f
是一个仿函数。此外,我们还有一个函数
g :: a -> m
我们可以用来获取一些
a
进入幺半群 - 很好。
fold :: f m -> m
来自我们自己的类(class) fmap :: (a -> b) -> f a -> f b
来自仿函数 f
f a -> m
现在如果只有
a
将是
m
那么我们可以使用
fold
……该死。
a
成
m
使用
g
- 但
a
被包装成
f
……该死。
f a
成
f m
使用
fmap
.... 叮叮叮
f a
进入 f m
:fmap g a
fold (fmap g a)
$
:
foldMap g a = fold $ fmap g a
module Foldable where
import Data.Monoid
class Functor f => Foldable f where
fold :: Monoid m => f m -> m
foldMap :: Monoid m => (a -> m) -> f a -> m
foldMap g a = fold $ fmap g a
instance Foldable [] where
fold [] = mempty
fold (x:xs) = mappend x (fold xs)
Sum
一起使用和
[1..4]
:
λ> foldMap Sum [1..4]
Sum {getSum = 10}
关于haskell - 用 Haskell 编写 foldMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26287157/
(这是 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在
我是一名优秀的程序员,十分优秀!