将输出 Monad 类型的函数转换为输出原始值类型的函数
Converting a function that output a Monad type to a function that output the raw value type
我有 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)] 作为参数和 return a -> [( k,v)]作为输出。
我的所有尝试都因 Haskell 类型检查而失败。
我认为这在数学上是不可能的。
考虑 m 是 Maybe 的情况:函数可以 return [(k,v)] 来自 Just [(k,v)],但是它 return 来自 Nothing 会是什么?
如果 monad 是 IO,从 monad 中提取参数会破坏 IO 提供的安全性。
还要考虑到您的函数必须适用于任何可以想到的单子。
我有 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)] 作为参数和 return a -> [( k,v)]作为输出。
我的所有尝试都因 Haskell 类型检查而失败。
我认为这在数学上是不可能的。
考虑 m 是 Maybe 的情况:函数可以 return [(k,v)] 来自 Just [(k,v)],但是它 return 来自 Nothing 会是什么?
如果 monad 是 IO,从 monad 中提取参数会破坏 IO 提供的安全性。
还要考虑到您的函数必须适用于任何可以想到的单子。