newtype State s a = StateOf (s -> (s, a))
deState :: State s a -> (s -> (s, a))
deState (StateOf stf) = stf
instance Functor (State s) where
-- fmap :: (a -> b) -> State s a -> State s b
fmap f (StateOf stf) = StateOf (\s0 -> case stf s0 of (s1, a) -> (s1, f a))
在最后一行
fmap f (StateOf stf) = StateOf (\s0 -> case stf s0 of (s1, a) -> (s1, f a))
of
语法让我感到困惑。它似乎不是case
语法的一部分。
答案 0 :(得分:3)
正如@melpomene所说,“ of”是大小写表达式的一部分。有关更多参考,请参见http://learnyouahaskell.com/syntax-in-functions#case-expressions。另外,case表达式包含在lambda表达式中,我将为您指向http://learnyouahaskell.com/higher-order-functions#lambdas供参考。 LYAH曾经并且继续是一个重要来源(至少对我而言)。