繁体   English   中英

是否存在“ forall v。Int-> v-> IO v”类型的有用居民?

[英]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

自由定理在这种情况下是否也要求getput只做一些琐碎的事情,如果是的话,我们是否可以欺骗ghc的类型系统来实现真正的类型索引IO数据库?

通常, IO可能会发生奇怪的事情,因此我认为关于IO的自由定理没有严格的概念。 无论如何,根据我对IO了解,假设这些功能可以

  1. 没有会崩溃的事情(例如执行无意义的指针算术以产生v类型的值),
  2. 不使用任何不安全的函数(通常会破坏任何类似于自由定理的推理),
  3. 不返回底部(例如, undefined或异常),并且
  4. 最终会“返回”

那么“返回的”值将成为参数。

但是,这意味着,这是不可能实现使用一种类型的索引数据库IO

Typeable a约束是可能的。 在这种情况下,预期的自由定理将不成立,并且允许get函数返回默认值以外的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM