gpt4 book ai didi

haskell |努力理解类型声明和缩写

转载 作者:行者123 更新时间:2023-12-03 23:19:54 25 4
gpt4 key购买 nike

在我关注的有关 Haskell 的类(class)中​​,我正在学习类型声明。目前,它正在讨论缩写,我对此感到困惑,而且我无法在网上找到我正在寻找的信息。
它给出了以下示例:

type Pair a = (a, a)
连同一段文字: Abbreviations - new name for existing types我在文档中看到了一个与上面代码非常相似的示例:
type Name = String
但从中我仍然无法理解上面的例子。
我正在努力理解它试图解释的内容,所以其他人可以为我理解它并给出它在程序中使用的简单示例吗?

最佳答案

这是一个 type alias [Haskell wiki] .它通常用于为更复杂的类型命名。
例如,如果您定义一个函数:

sum2 :: Pair Int -> Int
sum2 (x, y) = x + y
然后在幕后,因此决定:
sum2 :: (Int, Int) -> Int
sum2 (x, y) = x + y
类型别名通常用于
  • 给一个特殊的结构一个更方便的名字;
  • 缩短复杂的类型;和
  • 以便于从类型切换。

  • 例如 String定义为:
    type String = [Char]
    A String因此只是一个列表 Char Actor 。但是签名是 String重点是它可以处理文本数据。
    类型别名通常用于抽象出类型的复杂性。例如我们可以定义一个类型 Operator :
    type Operator a = a -> a -> a
    因此,这是映射两个 a 类型参数的函数的别名。到 a 类型的值.如果我们以后想要创建使用此运算符的函数,这很有趣。例如:
    maxOperator :: Ord a => Operator a -> Operator a -> Operator a
    maxOperator f g x y = max (f x y) (g x y)
    这更有可能比以下内容更具可读性:
    maxOperator :: Ord a => (a -> a -> a) -> (a -> a -> a) -> (a -> a -> a)
    maxOperator f g x y = max (f x y) (g x y)
    如果我们以后使用 Operator (Operator a) 肯定会更易读,因此解析为 (a -> a -> a) -> (a -> a -> a) -> a -> a -> a .
    如果您还不完全清楚您将使用什么类型,有时会使用最终类型。例如,如果您正在实现一个包并且您还没有决定使用 Float s 或 Double s,你可以定义一个类型别名:
    type Scalar = Float
    如果您后来改变主意,可以将其改写为 type Scalar = Double ,以及您使用过的所有地方 Scalar现在将解析为 Double .

    关于 haskell |努力理解类型声明和缩写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66387265/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com