相关疑难解决方法(0)

"你不明白欣德利 - 米尔纳的哪一部分?"

发誓曾经有一件T恤出售,上面写着不朽的话:


什么部分

辛德米尔纳

明白吗?


就我而言,答案就是......全部!

特别是,我经常在Haskell论文中看到这样的符号,但我不知道它的含义是什么.我不知道它应该是什么样的数学分支.

我当然认识到希腊字母的字母,以及诸如"∉"之类的符号(通常意味着某些东西不是一组的元素).

另一方面,我以前从未见过"⊢"(维基百科称它可能意味着"分区").我也不熟悉这里使用的vinculum.(通常它表示一个级分,但是这并不出现在这里是这种情况.)

如果有人至少可以告诉我从哪里开始想要理解这个符号海洋的含义,那将会有所帮助.

haskell functional-programming lambda-calculus hindley-milner denotational-semantics

832
推荐指数
6
解决办法
9万
查看次数

为什么我们需要总和类型?

想象一种语言,它不允许数据类型的多个值构造函数.而不是写作

data Color = White | Black | Blue
Run Code Online (Sandbox Code Playgroud)

我们会有

data White = White
data Black = Black
data Blue = Black
type Color = White :|: Black :|: Blue
Run Code Online (Sandbox Code Playgroud)

where :|:(这里不是|为了避免与sum类型混淆)是一个内置的类型union运算符.模式匹配可以以相同的方式工作

show :: Color -> String
show White = "white"
show Black = "black"
show Blue = "blue"
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,与副产品相比,它会产生扁平结构,因此您无需处理注射.而且,与sum类型不同,它允许随机组合类型,从而产生更大的灵活性和粒度:

type ColorsStartingWithB = Black :|: Blue
Run Code Online (Sandbox Code Playgroud)

我相信构造递归数据类型也不是问题

data Nil = Nil
data Cons a = Cons a (List a)
type List a = Cons a :|: Nil …
Run Code Online (Sandbox Code Playgroud)

haskell type-theory

11
推荐指数
3
解决办法
1096
查看次数

在Haskell中对类型类和变量赋值的误解

对Haskell来说是非常新的知识,它试图了解类型类和变量如何交互。

我要玩的第一件事是:

i :: a; i = 1
Run Code Online (Sandbox Code Playgroud)

我的期望是,由于我输入的字词尽可能通用,因此我应该绝对可以为其分配任何内容。(我知道我可能无法对变量i做任何事情,但这并不重要。)

但是我错了。上面给出了一个错误,并要求它是:

i :: Num a => a; i = 1
Run Code Online (Sandbox Code Playgroud)

经过多玩之后,我想到了以下内容:

g :: Num a => a -> a; g a = a + 1
g 1
(returned 2)
gg :: Num a => a; gg = g 1
gg
(returned 2)
Run Code Online (Sandbox Code Playgroud)

好的...到目前为止很好。让我们尝试一个小数参数。

g :: Num a => a -> a; g a = a + 1
g 1.3
(returned 2.3)
gg :: Num a => a; gg = g 1.3 …
Run Code Online (Sandbox Code Playgroud)

haskell types variable-assignment typeclass parametric-polymorphism

4
推荐指数
1
解决办法
98
查看次数

为什么编译器不接受将Int8作为"Real c"返回?

我有这个示例代码:

module Main where

import Data.Int
import Data.Text

data JavaValue = JavaString Text
              | JavaByte Int8
              | JavaShort Int16
              | JavaInt Int32
              | JavaLong Int64
              | JavaFloat Float
              | JavaDouble Double
              | JavaChar Char
              | JavaBool Bool
              | ArrayValue [JavaValue]
              | JavaNull deriving (Eq)

getnumberfromvalue :: Real c => JavaValue -> Maybe c
getnumberfromvalue (JavaByte n) =Just n
getnumberfromvalue (JavaShort n) =Just n
getnumberfromvalue (JavaInt n) =Just n
getnumberfromvalue (JavaLong n) =Just n
getnumberfromvalue (JavaFloat n) =Just n
getnumberfromvalue (JavaDouble …
Run Code Online (Sandbox Code Playgroud)

haskell numbers

0
推荐指数
1
解决办法
103
查看次数