- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
GHC Prelude 中列表的默认 monoid 是串联。
[1,2,3] <> [4,5,6]
变成 [1,2,3] ++ [4,5,6]
因此[1,2,3,4,5,6]
我想编写一个行为如下的 ZipList Monoid 实例:
[
1 <> 4
, 2 <> 5
, 3 <> 6
]
结果是[5,7,9]
假设我正在使用 sum monoid。请注意,它的行为类似于 zipWith (+)
它的行为可能是这样的:
[
Sum 1 <> Sum 4
, Sum 2 <> Sum 5
, Sum 3 <> Sum 6
]
我需要围绕 ZipList
创建一个新类型newtype 和 Sum
newtype 以便为 Monoid
创建一个实例, Arbitrary
, 和 EqProp
.从而避免孤儿实例。这就是 ZipList
的方式和 Sum
看起来像 Prelude
:
newtype ZipList a = ZipList { getZipList :: [a] }
newtype Sum a = Sum { getSum :: a }
这就是我的新类型 MyZipList
看起来:看起来对吗?
newtype MyZipList a =
MyZipList (ZipList [a])
deriving (Eq, Show)
instance Monoid a => Monoid (MyZipList a) where
mempty = MyZipList (ZipList [])
mappend (MyZipList z) (MyZipList z') =
MyZipList $ liftA2 mappend z z'
instance Arbitrary a => Arbitrary (MyZipList a) where
arbitrary = MyZipList <$> arbitrary
instance Eq a => EqProp (MyZipList a) where
(=-=) = eq
这就是我的新类型 MySum
好像:这看起来对吗?
newtype MySum a =
MySum (Sum a)
deriving (Eq, Show)
instance (Num a, Monoid a) => Monoid (MySum a) where
mempty = MySum mempty
mappend (MySum s) (MySum s') = MySum $ s <> s'
instance Arbitrary a => Arbitrary (MySum a) where
arbitrary = MySum <$> arbitrary
我需要帮助找出我出错的地方。
最佳答案
首先要注意 ZipList
的Applicative
实例已经具有您想要的 zippy 行为。
ghci> liftA2 (<>) (Sum <$> ZipList [1,2,3]) (Sum <$> ZipList [4,5,6]) :: ZipList Int
ZipList [Sum 5, Sum 7, Sum 9]
然后使用任何 Applicative
的事实产生 Monoid
通过 monoidal 仿函数本身提升其内容的 monoidal 行为。计划是抽象 liftA2 (<>)
我上面写的表达式的模式。
newtype Ap f a = Ap { getAp :: f a }
instance (Applicative f, Monoid a) => Monoid (Ap f a) where
mempty = Ap $ pure mempty
Ap xs `mappend` Ap ys = Ap $ liftA2 mappend xs ys
(据我所知 newtype
中缺少 base
,这对我来说似乎是一个疏忽,尽管可能有充分的理由。事实上,我认为 ZipList
应该有一个开箱即用的 zippy Monoid
实例,但是,唉,它没有。)
您想要的Monoid
那么只是Ap ZipList (Sum Int)
.这相当于 MyZipList
Monoid
你是手写的(除了你的 mempty
中的错误 - 它应该是 MyZipList $ ZipList $ repeat mempty
),但是用可重复使用的 newtype
编写它像这样的方式不那么特别,需要的样板也更少。
关于haskell - ZipList Monoid haskell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50130388/
我正在运行一个 redis 实例,我在其中存储了很多具有整数字段和值的哈希值。具体来说,有很多形式的散列 {1: , 2: , ..., ~10000: } 我最初使用 hash-max-ziplis
基地提供ZipList ,它只是 [] 的包装器在哪里 基于 zip而不是笛卡尔积。这不是默认值,因为它与 Monad [] 不一致。例如,但有些人觉得它更直观,而且这两种行为在不同的情况下都很有用。
我如何编译和执行 Redis ziplist.c作为单独的可执行文件? 我只想执行 ziplist.c 主函数。 最佳答案 您可以使用以下命令: gcc -std=c99 -O2 -DZIPLIST_
此前我们学习了常见的reids数据类型,这些数据类型都需要底层的数据结构的支持,现在我们来看看redis常见的底层数据结构:dict、ziplist、quicklist。 1 redis di
GHC Prelude 中列表的默认 monoid 是串联。 [1,2,3] <> [4,5,6]变成 [1,2,3] ++ [4,5,6]因此[1,2,3,4,5,6] 我想编写一个行为如下的 Zi
我想为我的自定义列表实现一个 Applicative 实例。 import Test.QuickCheck import Test.QuickCheck.Checkers import Test.Qu
这来自Haskell from First Principles一书中的练习。本练习是为 ZipList' 实现 Applicative,这类似于 Prelude 的 ZipList。书上有这个提示
假设我有一个数字列表和函数列表: val xs: List[Int] = List(1, 2, 3) val fs: List[Int => Int] = List(f1, f2, f3) 现在我想使
Typeclassopedia提出这个问题: Determine the correct definition of pure for the ZipList instance of Applicat
我正在从learn-you-a-haskell 书中学习Haskell 中的应用仿函数。 但是每当我尝试在 ghci 中输入以下代码时: :{ instance Applicative ZipList
应用程序的两个著名示例是 monad 和 ziplist。还有其他例子吗? 最佳答案 来自 Time flies like an applicative functor通过康纳麦克布莱德: Struc
我目前正在学习 Haskell 中的应用程序。如果我没记错的话,列表有两个不同的 Applicative 实例(List 和 ZipList - 第二个被定义为包装列表值的新类型)。 ZipList
我的问题示例:HMSET myhash field1 value1 field2 value2 而myhash只有这两个字段。 主要问题是如何计算hash-max-ziplist-value,以便我的
我是一名优秀的程序员,十分优秀!