haskell - `NS` 类型的大小写匹配

标签 haskell generics-sop

NS来自 sop-core 的类型产生了一个有趣的难题。在 S::NS f xs -> NS f (x ': xs) 中,其中 xs ~ '[] 表示 S 的参数> 有人居住。然而 Haskell 的大小写匹配迫使我对其进行匹配。这个问题有解决办法吗?

type T = NS I '[Int, String]

matchT :: T -> String
matchT = \case
  Z (I n) -> show n
  S (Z (I s)) -> s
  S (S _) -> error "FIXME" -- not reachable

如果你删除最后一个案例(实际上没有必要),Haskell 会提示“模式匹配并不详尽”。

最佳答案

使用EmptyCase !

matchT :: T -> String
matchT = \case
  Z (I n) -> show n
  S (Z (I s)) -> s
  S (S impossible) -> case impossible of {}

Real-world example

关于haskell - `NS` 类型的大小写匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72745746/

相关文章:

regex - 使用 Text.Regex.PCRE 解析网页标题缺少字符

haskell - IO monad 中的当前时间

haskell - 如何使用函数依赖和存在量化来为我的类型删除不必要的参数

haskell - 模板 Haskell 和隐式参数

haskell - 我可以将 cpp MIN_VERSION 条件用于 haskell 包吗?