- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Finally, given enough macro magic this could be done... but likely for now less effort than implementing a Haskell-style type system atop Clojure. Typed Clojure could be a great model for this except it's been explicitly designed so that the semantics of Clojure cannot be affected by the inferred types. This is exactly what happens in return type polymorphism and so it's explicitly impossible in Typed Clojure.
最佳答案
考虑 read
函数,它有一个(ad-hoc)多态返回值:
read :: (Read a) => String -> a
Read
的实例。在编译时选择,并且该推断可能导致为对
read
的同一调用选择不同的类型.
addFive :: Int -> Int
addFive x = x + 5
main :: IO ()
main = do
print (addFive (read "11"))
putStrLn (read "11")
read
用同样的论点两次。 Haskell 需要引用透明性,所以它必须两次产生相同的结果,对吧?嗯,不完全是。推断的返回类型很重要。在
print
行,推断的返回类型为
Int
.在
putStrLn
行,推断的返回类型为
String
.而且因为它是临时多态的,所以语义会随着类型变量的变化而变化。
print
行将打印出 16。
putStrLn
行会崩溃,因为
"11"
不是
read
的输入将成功解码为
String
.
Read
的哪个实例使用。弄清楚它的唯一方法是在编译时知道类型。所以 Typed Clojure 不能这样做——这意味着语义依赖于编译时类型。
Read a => String -> a
并不意味着函数根据其输入为其返回值选择一种类型。这意味着该函数根据其输出的类型选择其工作方式。
read
是一个不好的例子,因为它的不同行为只有在由于输入错误而引发异常时才会看起来特别不同。对于没有使用 Haskell 类型系统经验的人来说,很容易将其与运行时强制转换异常之类的东西混为一谈,即使它完全不同。
read
返回
Int
代码预期
String
, 和类似
ClassCastException
的东西发生。程序崩溃是因为
read
选择了一个解析器来解析 String
编译时基于其返回类型的文字 ,但给出的输入不是有效的
String
文字。 (相比之下,
"\"11\""
是有效的
String
文字,因为它被引用了。)
read
函数根据返回类型选择它将在编译时使用的解析器。这既是一种非常强大的技术,也是 Typed Clojure 无法做到的。
关于haskell - 语义(Haskell)受推断类型(返回类型多态性)的影响是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23282921/
当使用模板模板参数时,我如何推断或删除模板模板的模板类型? 考虑以下 SSCCE: #include #include #include using namespace std; templat
假设我有一些特质: trait A[T] { def foo: T } 一个扩展它的类: class B[T](t: T) extends A[T] { def foo = t } 以及父特征的子特征
一边玩-rectypes在某些时候选择 OCaml 我只是迷路了。 这个表达式几乎可以打字: # fun x -> x x;; - : ('a -> 'b as 'a) -> 'b = 但是这里 O
我正在编写一个类似 CRUD 的应用程序,并且通过主键进行大量查找(主键可以有不同的类型)。所以我定义了以下类型类: {-# LANGUAGE MultiParamTypeClasses #-} cl
我已经创建了关系 A 'is functional parent of' B并定义 'has functional parent'作为 'is functional parent of' 的倒数. '
给定一个使用 Kotlin 版本 1.3.61 和 JOOQ 版本 3.13.1 的系统,这样的方法会构建 union正常查询: val selectCommonPart = coalesce
考虑以下错误代码: fun x = if (null x) then 0 else (take 50 x) : (fun (drop 50 x)) 我注意到,我可以毫无问题地将它加载到
给定一个具有以下类型的函数 a: a::x -> Bool 和以下类型的另一个函数 b: b::Bool -> y 我正在尝试找出推断以下函数类型的步骤: c =\d -> d a b 有人可以帮助解
我正在尝试使用 Infer 工具来分析我的应用代码。我关注了these steps每次我尝试运行 infer -- gradle build 时,我都会收到以下错误: infer -- gradle
所以我制作了这个模板来定义内联仿函数: template struct AsFunctor { template std::invoke_result_t operator()(A
是否可以推断 CRTP 基类中模板化成员函数的返回类型? 虽然推断参数类型效果很好,但它因返回类型而失败。考虑以下示例。 #include template struct base { tem
使用 Series.interpolate 很容易在 Pandas.DataFrame 中插入值,如何进行外推? 例如,给定一个如图所示的 DataFrame,我们如何将它外推 14 个月到 2014
我想知道为什么这不起作用(缺少参数类型)? Seq(1,2,3).toSet.map(_ + 1) 但这确实: val foo = Seq(1,2,3).toSet foo.map(_ + 1)
我没有必要使用 SQLite3 shell 工具来维护一个小型数据库。我正在使用 -header -ascii标志,尽管据我所知,这适用于任何输出选择。我正在寻找一种方法来避免对返回的任何一个值的类型
我有以下组件 type PropTypes = { items: T[], header: (item: T) => React.Element, body: (item: T) => R
我想在 Eclipse/JSDT 中指定实例变量的类型,如下例所示: /** * @constructor */ function A() { /** @type Node */
我正在用 Python 编写一个方法,它看起来像这样: def rgb_to_grayscale(image): print(image.shape) pass 此处预期的类型是 nu
我有一个 my_values 数组,我正在尝试为其推断 true_values 数组中最接近、较小的值。使用下面的 find_nearest 函数并不能完成我想要的。我如何追加它以找到最近的、较小的值
在下面的代码中: template int b(int q, const std::array& types) { int r = q; for (int t : types)
在 Pandas DataFrame 中插入 NaN 单元非常容易: In [98]: df Out[98]: neg neu pos av
我是一名优秀的程序员,十分优秀!