这个例子非常直观。xs 有 3 种情况,分别是空列表、只有 1 个元素的列表和超过 1 个元素的列表。
describeList :: [a] -> String
describeList xs = "The list is " ++ case xs of [] -> "empty."
[x] -> "a singleton list."
xs -> "a longer list."
但是我迷失在下面的代码中
newtype State s a = StateOf{deState :: s -> (s, a)}
postInc :: State Int Int
postInc = StateOf (\i -> (i+1, i))
instance Monad (State s) where
return a = pure a
StateOf t >>= k = StateOf (\i0 -> case t i0 of
(i1, a) -> deState (k a) i1)
我完全不知道代表i1
什么a
。