【发布时间】:2011-08-04 09:30:00
【问题描述】:
是否可以在函数的类型变量上放置不等式约束,就像GHC type family docs 中的foo :: (a ~ b) => a -> b,除了不等式而不是等式?
我意识到可能没有直接的方法可以做到这一点(因为据我所知,ghc 文档没有列出任何内容),但鉴于所有我接触过的异国情调。
【问题讨论】:
-
您认为不等式约束对哪些用例有用?
-
具体来说,我正在尝试对商品数量进行建模,即带有标签的数字,例如,使您能够表达拥有 10 个苹果和 2 个梨的概念,并在需要时引发类型错误添加梨和苹果。这本身就很简单。然而,当我试图用另一种商品来定义一种商品的价格时,我的不足之处是,例如每个梨 2 个苹果。当然,只有在出售的商品类型与购买的商品类型不同时,价格才有意义。(至少在我的脑海中)。所以,出于好奇,我只是想知道是否真的可以表达这一点:)
-
我的怀疑是,虽然它可能傻,但价格是明确定义的(显然是 1 比 1),因此可能不值得尝试对不同的类型提出静态要求。
-
我有一个用例:) 我正在尝试对两种交替类型
[a,b,a,b,a]的列表进行建模,其中最后一个元素的类型是静态已知的。这允许在第一个和最后一个元素具有相同类型的列表上编写类型安全的last函数,因为编译器可以排除 Nil 情况为具有不兼容的类型,仅当类型为a和b不同.
标签: haskell type-inference type-systems