- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定以下程序:
{-# LANGUAGE DataKinds, GADTs #-}
{-# LANGUAGE TypeFamilies #-}
data Foo = A | B
type family IsA (foo :: Foo) :: Bool
type instance IsA A = True
type instance IsA B = False
data Bar (foo :: Foo) where
BarA :: (IsA foo ~ True) => Int -> Bar foo
BarB :: (IsA foo ~ False) => String -> Bar foo
f :: Bar A -> Int
f bar = case bar of
BarA x -> x
-fwarn-incomplete-patterns
时,我从 GHC 7.4.2 收到此警告对于总函数
f
上面定义:
Warning: Pattern match(es) are non-exhaustive
In a case alternative: Patterns not matched: BarB _
BarB
添加匹配项也是没有意义的。 :
Couldn't match type `'False' with `'True'
Inaccessible code in
a pattern with constructor
BarB :: forall (foo :: Foo). IsA foo ~ 'False => String -> Bar foo,
in a case alternative
In the pattern: BarB _
In a case alternative: BarB _ -> undefined
In the expression:
case bar of {
BarA x -> x
BarB _ -> undefined }
f
是总数吗?另外,这是 GHC 的一个错误,还是只是一个已知的限制?或者实际上有一个很好的理由为什么无法看到
f
中的模式匹配?已经完成?
最佳答案
这很烦人,是的。 GHC 假设类型族(和类)在其算法中是开放的。但是,您正在编写由封闭类型参数化的类型族。这种紧张关系解释了你和 GHC 之间的误解。我认为已经有一些关于如何处理封闭类型类(class)和家庭的想法,但这是一个棘手的领域。
同时,您可以避免类型族的开放性以说服整体检查器。
{-# LANGUAGE DataKinds, GADTs #-}
{-# LANGUAGE TypeFamilies #-}
data Foo = A | B
data Bar (foo :: Foo) where
BarA :: Int -> Bar A -- or BarA :: foo ~ A => Int -> Bar foo
BarB :: String -> Bar B -- or BarB :: foo ~ B => String -> Bar foo
f :: Bar A -> Int
f bar = case bar of
BarA x -> x
-- or f (BarA x) = x
关于haskell - 在使用类型系列限制 GADT 时摆脱 "non-exhaustive patten matches"警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12438909/
我有这样的文字 500 Robin Stuart zzzzzzz 我想要获取包含在两个选项卡中的文本 Robin STuart。有人可以帮我解决这个问题的正则表达式吗?我想出了 (^.*
在 python 中的代码是: list = "a123,145B,12" re.split("[a-zA-Z_]",list) 结果: ['', '123,145', ',12'] 我怎样才能保留字
我有这个正则表达式模式: r = New Regex("^((\"(?:[^\"]|\"\")*\"|[^,]*)(,(\"(?:[^\"]|\"\")*\"|[^,]*))*)$"); 这是导致此错
我正在开发一个包含多个模块的项目。我有一个位于基础的模块,并且对所有模块都是通用的。我在基本模块中有一个业务对象(这是单例类),这可以触发一个已完成某事的事件。 我希望每个模块都能够监听这个事件并做一
您好,我正在运行一个需要大量跨页面表单验证的应用程序,因此我尝试从我在 Controller 中使用的服务获取验证模式。 这里的问题是当我输入正确的电子邮件地址时,ng-pattern 没有以正确的方
给定以下程序: {-# LANGUAGE DataKinds, GADTs #-} {-# LANGUAGE TypeFamilies #-} data Foo = A | B type family
这个问题在这里已经有了答案: Javascript Regex Lookbehind Alternative (2 个答案) 关闭 4 年前。 我正在匹配下面描述的三种模式,它们都是独立的。按照超链
我是一名优秀的程序员,十分优秀!