drt*_*drt 15 haskell functional-programming
在Haskell中,(( - >)t)在实例的类型签名中意味着什么?例如,Functor,Applicative和Monad都有一个实例:
Functor ((->) r)
Run Code Online (Sandbox Code Playgroud)
我找不到任何关于这种类型签名的含义的解释,并且它具有高度的搜索引擎抗性.
npo*_*cop 19
->是一个中缀类型的构造函数.您可以将它与:- 列表类型的中缀值构造函数进行比较.为了:单独使用,我们在它周围加上括号,使它成为前缀函数应用程序:
(:) a b 是相同的 a : b
同样,与to 的函数类型(->) a b相同.a -> bab
(->) a是类型构造函数的部分应用程序,它本身就是一种类型的构造函数* -> *.
你可以把它想象成"一个函数类型的构造函数".Eg (->) Int是一个函数类型的构造函数Int.你可以通过另一种类型是构建全功能型:(->) Int String是函数的类型从Int到String.
instance Functor (->) a是一个函数,具有fmap将a -> b函数转换为a -> c函数的操作.您可以通过将参数应用于值来将其与instance Functor (Either a)映射Either a b到的类似物进行比较.Either a cfmapRight
wit*_*wit 10
我们可以使用lambda函数和中缀函数:
(->) a = \b -> (->) a b --pseudo-Haskell
(->) a = \b -> a -> b --pseudo-Haskell
Run Code Online (Sandbox Code Playgroud)
所以,读取实例为:
class Functor f where
fmap :: (a->b) -> f a -> f b
instance Functor ((->)r) where
fmap :: (a->b) -> f a -> f b
= (a->b) -> (->)r a -> (->)r b --pseudo-Haskell
= (a->b) -> (r -> a) -> (r -> b) --pseudo-Haskell
Run Code Online (Sandbox Code Playgroud)