簡體   English   中英

我可以在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM