haskell - 如何将 Int 字段限制为某个值范围?

标签 haskell

在我的数据中

data User = User { uRank :: Int, uProgress :: Int }

例如,我想将 uRank 限制为值列表 [-1, 1, 3]。

我该怎么做?

最佳答案

定义一个小总和类型是这个特定问题的最佳答案。您还可以将 newtype 与智能构造函数一起使用来实现此效果。

newtype Rank = UnsafeMkRank { unRank :: Int }

mkRank :: Int -> Maybe Rank
mkRank i 
    | i `elem` [-1, 1, 3] = Just (UnsafeMkRank i)
    | otherwise = Nothing

现在,只要您仅使用安全的 mkRank 构造函数,您就可以假设您的 Rank 值具有您想要的 Int 值。

关于haskell - 如何将 Int 字段限制为某个值范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41743056/

相关文章:

haskell - 此代码中的空间泄漏在哪里?

haskell - 我如何证明 Haskell 类型只有一个函数?

arrays - 多维可变向量 : possible? 如果是这样,怎么办?

haskell - 了解此 Haskell 程序的内存使用情况

haskell - 使用具有并发 MVar 的管道/代理

haskell - 如何删除Haskell中两个字符串列表之间的公共(public)元素?

haskell - 模式绑定(bind)中的单态性限制

haskell - 在 GHC 中链接不同的项目

haskell - 从二叉搜索树中删除节点,haskell

function - Haskell - 将函数作为参数传递