繁体   English   中英

Functor实例的状态

[英]Functor instance of State

instance Functor (State s) where
  fmap f (State g) = State $ \s0 -> 
      let (a, s1) = g s0
      in (f a, s1)

它是StateFunctor实现。 我无法理解它是如何工作的? 特别是, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM