haskell - 我可以在 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
推荐阅读
- swagger-ui - 在 Swagger-UI 中实现的 OpenID Connect(Google 的 Oauth)功能?
- android - 用于实现 React-Native WebView 的包
- c# - 没有 [ServiceFilter] 或 [TypeFilter] 的过滤器中的 Asp.net Core 依赖注入
- javascript - 为什么 Marzipano 不在移动设备(浏览器)上显示图像
- python - Tensorflow 实现多元学生 T 对角分布
- c - GCC 数组优化
- python - 相当于 Python 中的 pySpark flatMap
- java - Spring Integration ServiceActivator 返回类型如何工作?
- php - 根据 WooCommerce 中的付款方式更改运输方式
- c++ - 升级 Visual Studio 产量 - “IAsyncOperation”:未定义基类和未定义 IID_IAsyncOperation