假设我们要编写一个由 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 数据库吗?