[英]Is there a useful inhabitant for the type `forall v. Int -> v -> IO v`?
假设我们要编写一个由IO操作支持的通用属性映射,但是由于某些原因,我们需要将值类型设置为多态。
type Key = Int
get:: Key -> v -> IO v -- Takes a key and a default value, return the associated value
put:: Key -> v -> IO () -- store (Key,v) pair doing some IO
自由定理在这种情况下是否也要求get
和put
只做一些琐碎的事情,如果是的话,我们是否可以欺骗ghc的类型系统来实现真正的类型索引IO数据库?
通常, IO
可能会发生奇怪的事情,因此我认为关于IO
的自由定理没有严格的概念。 无论如何,根据我对IO
了解,假设这些功能可以
undefined
或异常),并且 那么“返回的”值将成为参数。
但是,这意味着,这是不可能实现使用一种类型的索引数据库IO
。
Typeable a
约束是可能的。 在这种情况下,预期的自由定理将不成立,并且允许get
函数返回默认值以外的值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.