![](/img/trans.png)
[英]Can I constrain the parametric polymorphic type on type/data constructor in Haskell?
[英]Can I define parametric data type where parameters are not equals between in Haskell?
問題:
讓我們假設我們有一個包含起點和終點的乘客:
data Passenger a = Passenger { start :: a
, end :: a
}
題:
如何將類約束應用於起點不應等於終點的乘客?
PS:我在 Scala 社區也問過類似的問題,但是沒有得到任何答復。 考慮到scala 的精煉庫受到了Haskell 精煉的啟發,也聽說了液體 Haskell,我想知道如何使用 Haskell 解決它?
我剛看到這個。 您可以通過指定end
字段的細化來實現,例如:
{-@ 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.