но как бы
1. претензии не ко мне
2. даже если название не до конца понятно по коду видно что парсер делает
instance Applicative PrsEP where
pure a = PrsEP $ \i s -> (i, Right (a, s))
(PrsEP pf) <*> (PrsEP px) = PrsEP fun where
fun i s = fixFoo $ do
let (i', f) = pf i s
(f, s') <- first (\s -> (i', s)) f
let (i'', x) = px i' s'
(x, s'') <- first (\s -> (i'', s)) x
Right (i'', f x, s'')
where
fixFoo (Left (i, s)) = (i, Left s)
fixFoo (Right (i, a, s)) = (i, Right (a, s))