对类型构造函数参数具有接口(interface)约束的 Idris 相关记录

标签 idris type-constraints

是否可以对 idris 中依赖记录的类型构造函数的参数进行接口(interface)约束?
假设我有一个接口(interface)Show : Type -> Type .现在我需要对以下依赖记录进行约束:

record Source s where
   constructor MkSource
   initial : s

我需要对参数 s 施加约束所以它应该始终是 Show 的一个实例.如何做到这一点?

最佳答案

Idris 正在大力开发,但根据最近发给 idris 组的这封电子邮件,记录语法目前不支持带有接口(interface)的约束类型:

https://groups.google.com/forum/#!topic/idris-lang/HMeTylslyFc

您将需要改用数据类型语法,例如

module Main

data Source: Type -> Type where
    MkSource: Show s => s -> Source s


x: Source Int
x = MkSource 3

showSource: Source s -> String
showSource  (MkSource x) = show $ x

testMe: (showSource $ Main.x = "3")
testMe = Refl

关于对类型构造函数参数具有接口(interface)约束的 Idris 相关记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47418867/

相关文章:

proof - 在 Fin 上证明二元运算符的身份

TypeScript 索引访问类型约束行为异常

generics - 在 F# 中,两种泛型类型约束表示有什么区别

generics - F# 泛型约束使一个泛型类型从另一个继承

haskell - 在枚举上构建 absurd 谓词的证明时,有什么技巧可以摆脱样板文件?

haskell - 如何在 Morte 上表示任意 GADT?

list - idris 有没有相当于 Agda 的 ↔

agda - 如何在树及其遍历之间建立​​双射?

wpf - 强制 WPF DataGrid 添加特定新项目的最佳方法是什么?

.net - 当参数没有这些约束时,如何调用具有类型约束的泛型方法?