data P a = Get (Char -> P a) 略 | Result a (P a) 略 なのを「え、一番直感的じゃん」
とか、 newtype ReadP a = R (forall b . (a -> P b) -> P b) で instance Monad ReadP where return x = R (\k -> k x) ← これとか fail _ = R (\_ -> Fail) R m >>= f = R (\k -> m (\a -> let R m' = f a in m' k)) ← これとか とか get = R Get ってなるを、「ああ、自明だなすげえ直感的」みたいに理解できるようになる物なんですかね。。難しすぎる。。。