gpt4 book ai didi

haskell - 为什么 Chars 没有类似于数字 `Char a => a` 的 (`Num a => a` )?

转载 作者:行者123 更新时间:2023-12-04 18:11:17 25 4
gpt4 key购买 nike

我不明白为什么当我查看以下类型时:a = (1, 2)我明白了

a :: (Num a, Num b) => (a, b)
相反,如果我查看以下类型: b = ('a', 'b')我明白了
b :: (Char, Char)
而不是这样的:
b :: (Char a, Char b) => (a, b)

最佳答案

Haskell 有两种类型的文字:单态和多态。 (虽然说起来可能更准确,文字可以评估为单态或多态类型的值。)'c'是单态文字的一个例子;它是单一类型的值,即Char .

> :t 'c'
'c' :: Char
1另一方面,是多态文字。它可以是具有 Num 的任何类型的值。实例。
> :t 1
1 :: Num p => p
> :t 1 :: Int
1 :: Int :: Int
> > :t 1 :: Char

<interactive>:1:1: error:
• No instance for (Num Char) arising from the literal ‘1’
• In the expression: 1 :: Char
其他多态文字包括
  • 浮点字面量
    > :t 3.4
    3.4 :: Fractional p => p
  • 字符串文字,当 OverloadedStrings扩展已启用。
     > :t "foo"
    "foo" :: [Char]
    > :set -XOverloadedStrings
    > :t "foo"
    "foo" :: Data.String.IsString p => p
  • 列出文字,当 OverloadedLists扩展已启用。
    > :t ['a', 'b']
    ['a', 'b'] :: [Char]
    > :set -XOverloadedLists
    > :t ['a', 'b']
    ['a', 'b'] :: (GHC.Exts.IsList l, GHC.Exts.Item l ~ Char) => l
  • Nothing 等数据构造函数(如果您想将 nullary 构造函数视为文字)
    > :t Nothing
    Nothing :: Maybe a
    Nothing ,例如,可以是 Maybe Int 类型的值, Maybe Char , ETC。
  • 关于haskell - 为什么 Chars 没有类似于数字 `Char a => a` 的 (`Num a => a` )?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69745004/

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