我可以在Haskell中定义参数不相等的参数数据类型吗? [英] Can I define parametric data type where parameters are not equals between in Haskell?
问题描述
问题:
假设我们有一个乘客,其起点和终点分别表示为:
Let's imagine we have a Passenger with start and end points represented by:
data Passenger a = Passenger { start :: a
, end :: a
}
问题:
如何将类约束应用于起始点不应该等于结束点的旅客?
How can I apply a class constraints to Passenger, where the start point shouldn't be equal to the end point?
PS: 我已经问过类似的针对scala的改进库受
P.S.: I have asked a similar question in the Scala community, but I didn't receive any answer. Considering that refined library for scala is inspired by refined for Haskell, also hearing about liquid-Haskell, I wonder how can resolve it using Haskell?
推荐答案
我刚刚看到了这个.您可以通过在end
字段上指定细化来实现,例如:
I just saw this. You can do so by specifying a refinement on the end
field, e.g.:
{-@ data Passenger a = Passenger
{ start :: a
, end :: {v:a | v /= start}
}
@-}
data Passenger a = Passenger
{ start :: a
, end :: a
}
ok :: Passenger String
ok = Passenger "Alice" "Jones"
bad :: Passenger String
bad = Passenger "Bora" "Bora"
您可以在此处在线玩:
http://goto.ucsd.edu: 8090/index.html#?demo = permalink%2F1551137259_16583.hs
这篇关于我可以在Haskell中定义参数不相等的参数数据类型吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!