Haskell中是否有“ of”语法?

时间:2018-08-23 05:23:45

标签: haskell syntax

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语法的一部分。

1 个答案:

答案 0 :(得分:3)

正如@melpomene所说,“ of”是大小写表达式的一部分。有关更多参考,请参见http://learnyouahaskell.com/syntax-in-functions#case-expressions。另外,case表达式包含在lambda表达式中,我将为您指向http://learnyouahaskell.com/higher-order-functions#lambdas供参考。 LYAH曾经并且继续是一个重要来源(至少对我而言)。