簡體   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