- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个非常人为的例子,但无论如何......这个类型检查:
newtype Foo c = Foo { runFoo :: c -> Bool }
newtype Bar c = Bar { runBar :: Int -> c }
foo :: Eq c => Bar c -> (c -> [c]) -> Bar (Foo c)
foo bar f = Bar res
where res n = Foo judge
where judge c = (c`elem`) . f $ runBar bar n
GHCi> let foo0 = foo (Bar id) (\n -> [n, n*2])
GHCi> map (runFoo $ runBar foo0 4) [1..10]
[False,False,False,True,False,False,False,True,False,False]
judge
,
foo :: Eq c => Bar c -> (c -> [c]) -> Bar (Foo c)
foo bar f = Bar res
where res n = Foo judge
where judge :: c -> Bool
judge c = (c`elem`) . f $ runBar bar n
Could not deduce (c ~ c2)
from the context (Eq c)
bound by the type signature for
foo :: Eq c => Bar c -> (c -> [c]) -> Bar (Foo c)
ScopedTypeVariables
应该允许写这样的签名,但显然它没有。是否有特定原因,是否有意使其不适用于嵌套
where
s,如果这出现在可比较的实际问题中,有什么解决方法?
最佳答案
显然你忘记带类型变量 c
使用显式 forall
进入范围,
{-# LANGUAGE ScopedTypeVariables #-}
module Foobar where
newtype Foo c = Foo { runFoo :: c -> Bool }
newtype Bar c = Bar { runBar :: Int -> c }
foo :: forall c. Eq c => Bar c -> (c -> [c]) -> Bar (Foo c)
foo bar f = Bar res
where res n = Foo judge
where judge :: c -> Bool
judge c = (c`elem`) . f $ runBar bar n
ScopedTypeVariables
本身不会将签名中的类型变量带入作用域,只有那些具有显式
forall
被纳入范围。
关于haskell - ScopedTypeVariables 无法与嵌套的 where 子句一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12176037/
ScopedTypeVariables 的缺点是什么? ,如果有的话?为什么默认不开启?它会导致更糟糕的推理吗?是否存在失败的边缘情况?在 GHC 中实现是否困难得多? 最佳答案 这也是因为它改变了程
这是一个返回指针对齐方式的简单函数: {-# LANGUAGE ScopedTypeVariables #-} import Foreign.Ptr (Ptr) import Foreign.Stor
Haskell wiki on ScopedTypeVariables没有描述如何在类型类及其实例之间处理类型变量的范围。 编译如下 {-# LANGUAGE ScopedTypeVariables
我有以下工作定义: {-# LANGUAGE ScopedTypeVariables #-} module Control.Retry where import Prelude hiding (cat
这是一个非常人为的例子,但无论如何......这个类型检查: newtype Foo c = Foo { runFoo :: c -> Bool } newtype Bar c = Bar { run
我正在探索长度索引向量的“陈腐”示例,代码改编自 Richard Eisenberg's thesis 3.1节 {-# LANGUAGE GADTs, TypeFamilies, DataKind
考虑这个模糊类型推断的简单示例: #! /usr/bin/env stack {- stack runghc -} {-# LANGUAGE ScopedTypeVariables #-} {-# L
我对 servant 感到很兴奋, 只要它不妨碍我,我就可以接受它的内部类型级魔法,唯一让我困惑的是它使用了 type-proxy在公共(public) API 中。这是code : serve ::
我是一名优秀的程序员,十分优秀!