[英]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.