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