haskell - 如何将 [Maybe Text] 与镜头连接?
问题描述
有没有办法用镜头写下以下内容......
[Maybe Text] -> Text
...这可能可以概括为:
(Monoid a, Traversable t) => t a -> a
我正在尝试做的一个具体示例:
[Just "abc", Nothing, Just "def"] -> "abcdef"
[Nothing, Nothing] -> ""
PS:我假设镜头有一些时髦的组合器来做到这一点。如果我被镜头的美妙所蒙蔽,而这可以通过更简单的组合器轻松实现,请告诉我。
解决方案
您的(Monoid a, Traversable t) => t a -> a
功能可以进一步推广到一个简单的fold :: (Foldable f, Monoid a) => f a -> a
.
例如:
Prelude> import Data.Foldable
Prelude Data.Foldable> fold [Just "abc", Nothing, Just "def"]
Just "abcdef"
我们可以将其从以下内容中解开Maybe
:
import Data.Foldable(fold, mempty)
import Data.Maybe(maybe)
foldMaybe :: (Foldable f, Monoid a) => f (Maybe a) -> a
foldMaybe = fromMaybe mempty . fold
例如:
Prelude Data.Foldable Data.Maybe> foldMaybe [Just "abc", Nothing, Just "def"]
"abcdef"
Prelude Data.Foldable Data.Maybe> foldMaybe [Nothing] :: String
""
推荐阅读
- javascript - 错误:create-react-app 正在中止安装
- c# - 如何在 UWP 中的多页上打印
- php - 如何将 WordPress 内容从 Dev 部署到 Staging 到 Production 环境?
- sql-server - 带参数的存储过程如何防止 SQL 注入
- powershell - 排序哈希表(哈希表)
- jquery - 使用 jQuery 多选更改 SVG 的颜色
- python - 两个代理在一个 kafka 主题上具有不同的过滤器。浮士德流中的确认
- oracle - 通过 GET/POST 响应更新 Oracle 数据库
- node.js - API调用反应,服务器上的req.body为空
- javascript - 未从不同的 js 文件定义的函数(不是顺序问题) - 仅限 IE