我正在尝试在Idris中写一条记录但是它有一个通用参数需要受到接口的约束。对于普通的联合类型,我可以写:
data BSTree : (a : Type) -> Type where
Empty : Ord a => BSTree a
Node : Ord a => BSTree a -> a -> BSTree a
但是我试图弄清楚做同样事情的语法,只是记录。我试过像:
record Point a where
constructor MkPoint : Eq a => a -> a -> Point a
x : a
y : a
但它没有编译。
有没有办法在Idris做到这一点?
TIA
答案 0 :(得分:2)
你可以这样做:
record Point a where
constructor MkPoint
x : Eq a => a
y : Eq a => a
虽然实际上你不应该这样做。相反,最好使用一些智能构造函数,其他函数如mkPoint : Eq a => a -> a -> MkPoint a
。
在现实生活中,您不需要约束数据类型的字段类型。阅读-XDataTypeContexts
Haskell扩展。