【发布时间】:2013-10-11 07:40:52
【问题描述】:
有没有一种类型化的编程语言可以像下面两个例子那样约束类型?
-
概率是一个浮点数,最小值为 0.0,最大值为 1.0。
type Probability subtype of float where max_value = 0.0 min_value = 1.0 -
离散概率分布是一个映射,其中:键应该都是同一类型,值都是概率,值的总和 = 1.0。
type DPD<K> subtype of map<K, Probability> where sum(values) = 1.0
据我了解,这对于 Haskell 或 Agda 是不可能的。
【问题讨论】:
-
我相信 ADA 有类似的东西(子类型约束)。例如www-users.cs.york.ac.uk/~andy/lrm95/03_02_02.htm
-
您正在寻找依赖类型的语言——类型可以依赖于值。一些例子包括 Idris、Agda 和 Coq。
-
SQL 肯定会这样做(参见w3schools.com/sql/sql_check.asp)
-
嗨,我在 LiquidHaskell 上工作(在下面的答案中描述)并且非常好奇(并且感激!)看到你正在处理的程序/应用程序(特别是你所在的代码) '希望保留这些约束。)谢谢!
-
Shen (shenlanguage.org) 有这个功能。有关示例,请参见 groups.google.com/d/msg/qilang/3lAyZhxQ4sw/HtSJs9JXtEsJ。
标签: haskell agda dependent-type