haskell - 将输出 Monad 类型的函数转换为输出原始值类型的函数
问题描述
我有 2 个类型定义
type Mapper a k v = a -> [(k,v)]
type MapperM m a k v = a -> m [(k,v)]
我想编写一个从类型转换值的函数
(Ord k, Monad m) => MapperM m a k v
输入
Ord k => Mapper a k v
基本上是一个以a -> m [(k,v)]作为参数并返回a -> [(k,v)]作为输出的函数。
我所有的尝试都以 Haskell 类型检查失败。
解决方案
我相信这在数学上是不可能的。
考虑当 m 为 Maybe 的情况:函数可以从 Just [(k,v)] 返回 [(k,v)],但它会从 Nothing 返回什么?
如果 monad 是 IO,从 monad 中提取参数会破坏 IO 提供的安全性。
还要考虑你的函数必须适用于任何可以想象的单子。
推荐阅读
- java - 如何在java中解析嵌套的json
- elasticsearch - 用于检查所有数组元素是否存在的弹性搜索查询
- c# - 如何获取与绑定对象关联的“组合框”或“按钮”对象?
- rust - 如何为 Cargo 设置默认并行作业的数量 [-j 4]?
- reactjs - 从另一个组件的表单复制表单输入 - React Hook Form
- node.js - 我无法使用 ts-node-dev 启动 ts+express+node 项目
- dataframe - 替换数据框中的值
- java - 结合ArrayList
和数组列表 一个适配器和列表视图 - c++ - 为什么我在输入 cout<<""< 时出现总线错误 10
我写了一个代码,但是有一个问题。当我
cout<<""<<endl;
熄灭时,我有 Bus error: 10. 我该如何解决这个问题。这是我的代码:#include <iostream> #include <sst
- sublimetext3 - Sublime 3 scroll_past_end 设置它将滚动过去的行数