我们想说我们要编写一个由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数据库?
答案 0 :(得分:8)
一般来说,IO
可能会发生奇怪的事情,所以我认为没有涉及IO
的严格的自由定理概念。无论如何,根据我对IO
的了解,假设函数执行
undefined
或例外)和然后“返回”值将成为参数。
但这意味着使用IO
实现类型索引数据库 。
可以使用Typeable a
约束。在这种情况下,预期的自由定理不成立,并且允许get
函数返回除默认值之外的其他内容。