instance Functor (State s) where
fmap f (State g) = State $ \s0 ->
let (a, s1) = g s0
in (f a, s1)
Functor
是State
的实施。我无法理解它是如何工作的?特别是,使用g
因为它是一个函数,但在我看来它不是一个函数。它只是对象(也许是函数),但我无法理解为什么它是函数。毕竟,它应该是某种状态,所以它可以是Int
请说清楚。
答案 0 :(得分:7)
看起来您的州类型如下:
min(range(len(array)), key=lambda i: abs(array[i]-some_value))
所以你的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)
返回的状态不变。