what is monad by Haskell
楔子 Monad 是一個數學特性,來看看純的 Haskell 語言怎看待,使用「除法」來做一個簡單的示範說明。 Monads 這是一個 Haskell 基本的語法,宣告一個 Expre 的格式,他有可能是 Int (Val type) ,也有可能是 Div data Expr = Val Int | Div Expr Expr eval :: Expr -> Int eval (Val n) = n eval (Div x y) = eval x `div` eval y eval (Div (Val 1) (Val 0)) safediv :: Int -> Int -> Maybe Int safediv _ 0 = Nothing safediv n m = Just (n ‘div‘ m) eval :: Expr -> Maybe Int eval (Val n) = Just n eval (Div x y) = case eval x of Nothing -> Nothing Just n -> case eval y of Nothing -> Nothing Just m -> safediv n m eval :: Expr -> Maybe Int eval (Val n) = pure n eval (Div x y) = pure safediv <*> eval x <*> eval y (>>=) :: Maybe a -> (a -> Maybe b) -> Maybe b mx >>= f = case mx of Nothing -> Nothing Just x -> f x eval :: Expr -> Maybe Int eval (Val n) = Just n eval (Div x y) = eval x >>= \n -> eval y >>= \m -> safediv n m m1 >>= \x1 -> m2 >>= \x2 -> ....