list - 列出映射相应元素对的半群实例
问题描述
我正在寻找最常见的 Haskell 库,它引入了通过将 ing委托给其元素[a]
来实例化的包装器,其方式类似于:Semigroup
mappend
newtype SList a = SList { slist :: [a] }
instance Semigroup a => Semigroup (SList a) where
l1 <> l2 = SList $ foldl1 (<>) <$> transpose [slist l1, slist l2]
例如,SList [a,b,c] <> SList [d,e,f,g]
将评估为SList [a <> d,
b <> e, c <> f, g]
。
令我惊讶的是,我在 Prelude 或其他最受欢迎的库中都找不到任何东西。这是为什么?
解决方案
不是包装器类型,而是在常规列表上执行此操作的不同函数:salign
来自 semialign 的 Data.Semialign。您可以直接调用它,也可以根据它实现 SList:
import Data.Semialign (salign)
instance Semigroup a => Semigroup (SList a) where
SList l1 <> SList l2 = SList (salign l1 l2)
推荐阅读
- python - django.db.utils.ProgrammingError:(1146,“表'lab_equipment.lab_add'不存在”)
- html - 用于 mvc 的 html 中的中心页面列表
- python-3.x - threading.Lock 实际上是如何工作的?(有多种场景)
- python - 当我尝试打开程序时,Pyinstaller 会关闭我的程序
- jenkins - 在 Windows 10 中安装 Jenkins 后无法找到 InitialAdminPassword 文件
- python - 将 Pandas 数据帧拆分为多个迷你数据帧
- botframework - Bot Composer:如何在 bot Composer 中将属性值设置为 dateTime V2 LUIS 分辨率值
- html - 为什么这个简单的 css 代码会导致 body 中的所有 div 元素变红?
- tensorflow - Tensorflow 损失收敛,但模型即使在训练数据上也无法预测
- java - JavaFX 将自定义按钮添加到 HTMLEditor 工具栏的位置