小编Jak*_*son的帖子

描述非类型特定的 Haskell 函数的类型签名的方法是什么?

给定一个像 的函数negate,它具有类型签名:

negate :: Num a => a -> a
Run Code Online (Sandbox Code Playgroud)

我将其描述为a上下文中的类型Num(如果您认为我错了,请纠正我)。

但我不完全确定如何描述last具有类型签名的类似:

last :: [a] -> a
Run Code Online (Sandbox Code Playgroud)

我的猜测是说它不是特定于类型的,并且它需要一个列表并生成一个与列表相同类型的值。这是正确的思考方式吗?

haskell types function type-signature haskell-prelude

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

哈斯克尔 | 努力理解类型声明和缩写

在我关注的有关 Haskell 的课程中​​,我正在学习类型声明。目前,它正在讨论缩写,我对此感到困惑,而且我无法在网上找到我正在寻找的信息。

它给出了以下示例:

type Pair a = (a, a)
Run Code Online (Sandbox Code Playgroud)

连同一段文字: Abbreviations - new name for existing types

我在文档中看到了一个与上面代码非常相似的示例:

type Name = String
Run Code Online (Sandbox Code Playgroud)

但从中我仍然无法理解上面的例子。

我正在努力理解它试图解释的内容,所以其他人可以为我理解它并给出它在程序中使用的简单示例吗?

haskell types

3
推荐指数
1
解决办法
71
查看次数

我正在努力理解如何在 Haskell 中读取 concat

concat的代码:

concat :: [[a]] -> [a]
concat xss = [x | xs <- xss, x <- xs]
Run Code Online (Sandbox Code Playgroud)

我不明白它是如何被阅读的。如何xss拆分为xsx?还是我误读了?

例如,给定:

concat [[1,2,3],[4],[5]]
Run Code Online (Sandbox Code Playgroud)

是如何[1,2,3,4,5]实现的?

haskell list-comprehension list concatenation

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

关于列表,方括号和圆括号有什么区别?

正如标题所暗示的那样,我不确定方括号和圆括号在列表方面的区别。

Haskellinsert定义的两个版本,一个使用方括号,另一个使用括号:

insert' :: Int -> [Int] -> [Int]
insert' y [] = [y]
insert' y (x:xs) | y <= x = y:x:xs | otherwise = x : insert' y xs
----
insert' y [x:xs] | y <= x = y:x:xs | otherwise = x : insert' y xs
Run Code Online (Sandbox Code Playgroud)

的第二个定义insert'不起作用的原因是什么?

它给出的错误消息,对于任何想知道的人:

test.hs:3:12: error:
    • Couldn't match expected type ‘Int’ with actual type ‘[Int]’
    • In the pattern: x : xs
      In the pattern: [x : xs] …
Run Code Online (Sandbox Code Playgroud)

recursion haskell types pattern-matching type-mismatch

1
推荐指数
2
解决办法
160
查看次数