gpt4 book ai didi

function - 在 Haskell 中创建多态函数

转载 作者:行者123 更新时间:2023-12-04 04:47:54 26 4
gpt4 key购买 nike

简短的搜索并没有帮助我找到答案,所以我开始怀疑它的存在。问题很简单。我想创建一个多态函数,如下所示:

f :: String -> String
f s = show (length s)

f :: Int -> String
f i = show i

意味着针对不同数据类型定义不同的函数。可能吗?如果是,如何?

最佳答案

Haskell 中有两种多态性:

  • 参数多态性;和
  • 有界多态

  • 第一个是最通用的——一个函数是参数多态的,如果它对所有类型的行为一致,至少在它的一个类型参数中。

    例如,函数 length是多态的——它返回一个列表的长度,不管它的列表中存储的是什么类型。
    length :: [a] -> Int

    多态性由小写类型变量指示。

    现在,如果您希望对特定类型集具有自定义行为,那么您就有了有界多态性(也称为“ad hoc”)。在 Haskell 中,我们为此使用类型类。

    该类声明了哪些函数将在一组类型中可用:
    class FunnyShow a where
    funnyshow :: a -> String

    然后您可以为您关心的每种类型定义实例:
    instance FunnyShow Int where
    funnyshow i = show (i+1)

    有可能:
    instance FunnyShow [Char] where
    funnyshow s = show (show s)

    关于function - 在 Haskell 中创建多态函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12430660/

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