[英]Functor instance of State
instance Functor (State s) where
fmap f (State g) = State $ \s0 ->
let (a, s1) = g s0
in (f a, s1)
它是State
的Functor
实现。 我无法理解它是如何工作的? 特别是, g
被用作它的功能,但在我看来它不是一个功能。 它只是对象(也许是函数),但我无法理解为什么它是函数。 毕竟,它应该是一些状态,所以它可以例如Int
请说清楚。
看起来您的州类型如下:
data State s a = State (s -> (a ,s))
所以你的fmap
函数应该有类型:
fmap :: (a -> b) -> (State s a) -> (State s b)
当您匹配输入状态值时
fmap f (State g) = State $ \s0 ->
g
是一个函数s -> (a, s)
,你需要构造一个类型s -> (b, s)
。
(a, s1) = g s0
将输入状态应用于现有的有状态计算,将a
绑定到结果,将s1
绑定到新状态。 然后将f
应用于a
以获取映射结果值
(f a, s1)
而从g
返回的州没有变化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.