我可以定义参数不等于 Haskell 的参数数据类型吗?
Can I define parametric data type where parameters are not equals between in Haskell?
问题:
假设我们有一个 Passenger,起点和终点表示为:
data Passenger a = Passenger { start :: a
, end :: a
}
问题:
如何对 Passenger 应用 class 约束,其中起点不应等于终点?
P.S.:
我问过类似的 question in the Scala community, but I didn't receive any answer. Considering that refined library for scala is inspired by refined for Haskell,也听说过 liquid-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
问题:
假设我们有一个 Passenger,起点和终点表示为:
data Passenger a = Passenger { start :: a
, end :: a
}
问题:
如何对 Passenger 应用 class 约束,其中起点不应等于终点?
P.S.: 我问过类似的 question in the Scala community, but I didn't receive any answer. Considering that refined library for scala is inspired by refined for Haskell,也听说过 liquid-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