gpt4 book ai didi

haskell - 新类型声明函数?

转载 作者:行者123 更新时间:2023-12-02 17:23:51 25 4
gpt4 key购买 nike

我熟悉新类型声明:

newtype MyAge = Age {age :: Int} deriving (Show, Eq, Ord)

在本例中,Age 是一个 Int,但是我遇到了下面的代码,但我无法理解它:

newtype Ages a = Ages {age :: String -> [(a,String)]}

这似乎是一个函数声明? (接受字符串,返回包含“a”和字符串的元组列表)-这是正确的吗?

注意,我刚刚意识到这只是声明函数的基本记录语法。

另外,我尝试实现这种类型,但我一定做错了什么:

newtype Example a = Example {ex :: Int -> Int}

myexample = Example {ex = (\x -> x + 1)}

这可以编译,但是我不明白为什么我没有传递“a”参数?

最佳答案

This appears to be a function declaration?

是的。具体来说,String -> [(a,String)] 是一个函数类型。 newtype 声明类似于任何给定类型的简单包装器。没有任何限制表明您不能基于函数类型来制作它,并且它的工作方式完全相同。

还请记住,您总是可以将newtype替换为data;在这种情况下,将结果类型视为具有函数字段的记录类型可能会有所帮助; newtype 只是一个特殊的、优化的案例。


另一件事要提到的是,您的两条线也有所不同,因为第二条线是通过 a 进行参数化的。这当然可以与常规类型一起使用:

newtype MyWrapper a = MyWrapper a

或者函数类型可以是newtype-d,无需参数化

newtype MyFunction = MyFunction (Float -> Float)

您还可以使用记录语法编写上述内容,该语法也为您提供“getter”函数。

关于haskell - 新类型声明函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848495/

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