我在看以下功能:
fmap :: (a -> b) -> f a -> f b
并且我想了解“ f”的含义,例如(f a
或f b
)中的。我正在阅读的文章将其描述为“盒子”,但是它的实际正确名称是什么?它只是类型变量吗?我认为我感到困惑,并认为它是一个功能应用程序-正确吗?
您的直觉是它是一种函数应用程序,这是正确的,但它们不是常规函数。相反,这是类型构造函数在类型级别上的应用。
具体来说,函子必须具有类型(type-of-type)* -> *
,这意味着它们使用一个类型实参并产生具体的类型*
,例如[Int]
。
此类类型构造函数的示例包括IO, Maybe, [], Either e
,等等,并且这些特定示例均具有有效的Functor实例。
fmap (+1) [1,2,3] :: [] Int -- also known as [Int]
= [2,3,4]
fmap (+1) (Just 1) :: Maybe Int
= Just 2
fmap (+1) (Right 1) :: Either e Int
= Right 2
fmap (+1) (return 1) :: IO Int -- Uses Monad IO instance as well
"=" 2
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句