b)"类型签名在 Haskell 中是什么意思?-6ren"> b)"类型签名在 Haskell 中是什么意思?-我试图理解 Haskell 中的应用程序。无法弄清楚以下类型签名是什么意思: f (a -> b) 例如: foo :: Num a => Maybe (a -> a) foo = Just (+1)-6ren">
gpt4 book ai didi

haskell - "f (a -> b)"类型签名在 Haskell 中是什么意思?

转载 作者:行者123 更新时间:2023-12-04 00:57:18 24 4
gpt4 key购买 nike

我试图理解 Haskell 中的应用程序。无法弄清楚以下类型签名是什么意思:

f (a -> b)

例如:
foo :: Num a => Maybe (a -> a)
foo = Just (+1)

怎么理解 Maybe (a -> a)的意思?是函数吗?如果是,则允许使用哪些类型的参数?
同样显然我是函数式编程的新手,将感谢有关此主题的任何资源。

最佳答案

在函数式编程中,函数与数字或任何其他类型的值并没有太大区别。实际上唯一的区别是您使用函数的方式是将其应用于参数。

类型为 Maybe a 的值是值 Nothing或者是 Just x , 其中 x类型为 a .所以如果你有一个 Maybe (a -> a) 类型的值,喜欢你的 foo , 要么是 Nothing ,或者是 Just f哪里f是一个函数 a -> a .以最不花哨的方式,您可以像这样使用它:

case foo of
Nothing -> "There was no function"
Just f -> "There was a function, and its value at 0 is " ++ show (f 0)

所以如果结果是 foo不是 Nothing , 那么它包含 Just一个函数作为它的值。

@Erich 是对的,尤其是文字表达式 f (a -> b)可能与应用仿函数有关,但不一定如此。例如,我最喜欢的类型是同构类型——两种类型之间的等价:
data Iso a b = Iso (a -> b) (b -> a)
Iso甚至不是 Functor ( Applicative 的先决条件),但它仍然非常有用。结果表明,pairs 等价于来自 Bool 的函数。 .我们可以构建这样的等价关系 Iso值(value):
pairEquiv :: Iso (a,a) (Bool -> a)
pairEquiv =
Iso (\(x,y) -> \b -> if b then x else y) -- from pair to function
(\f -> (f True, f False)) -- from function to pair

这里 (Bool -> a)作为类型构造函数的参数出现,它只是意味着如果你给 Iso一对,它会给你一个功能,反之亦然。

关于haskell - "f (a -> b)"类型签名在 Haskell 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61331886/

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