gpt4 book ai didi

function - Haskell 中的函数和仿函数有什么区别?只有定义?

转载 作者:行者123 更新时间:2023-12-01 06:57:00 25 4
gpt4 key购买 nike

在 Haskell 中,当编写函数时,这意味着我们将某物(输入)映射到另一物(输出)。我试着用 LYAH 来理解 Functor 的定义:看起来就像一个普通的 Functor。

  • 函数可以称为 Functor 有什么限制吗?
  • Functor 是否允许有 I/O 或任何其他副作用?
  • 如果在 Haskell 中,“一切都是函数”,那么引入“仿函数”概念的意义何在?功能的受限版本,还是功能的增强版本?

  • 很迷茫,求指教。
    谢谢。

    最佳答案

    首先,在 Haskell 中“一切都是函数”是不正确的。很多东西都不是函数,比如4 .或者字符串 "vik santata" .

    在 Haskell 中,函数是将一些输入映射到输出的东西。函数是一个值,您可以将其应用于其他值以获得结果。如果一个值有 ->在它的类型中,它可能是一个函数(但这个经验法则有无数个例​​外;-))。

    以下是一些函数示例(引用自 GHCI session ):

    λ: :t fst
    fst :: (a, b) -> a
    λ: :t even
    even :: Integral a => a -> Bool

    以下是一些非函数的例子:
  • 可以采用任何类型的(多态)值 a前提是该类型是 Num 的成员类(例如 Int 将是有效类型)。可以从数字的使用方式推断出确切的值。

    注意这个类型有=>在其中,这与 -> 完全不同.它表示“类约束”。
    λ: :t 5
    5 :: Num a => a
  • 功能列表。请注意,这有一个 ->在它的类型中,但它不是顶级类型构造函数(顶级类型是 [] ,即“列表”):
    λ: :t [fst, snd]
    [fst, snd] :: [(a, a) -> a]

  • 仿函数不是可以应用于值的东西。仿函数是其值可以与 fmap 一起使用(并由其返回)的类型。函数(前提是 fmap 函数符合某些规则,通常称为“定律”)。您可以找到属于 Functor 一部分的基本类型列表。使用 GHCI:
    λ: :i Functor
    [...]
    instance Functor (Either a) -- Defined in ‘Data.Either’
    instance Functor [] -- Defined in ‘GHC.Base’
    instance Functor Maybe -- Defined in ‘GHC.Base’
    [...]

    这意味着您可以申请 fmap到列表,或到 Maybe值,或到 Either值。

    关于function - Haskell 中的函数和仿函数有什么区别?只有定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36448563/

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