module Text.Syntax.Classes where import Prelude () import Control.Isomorphism.Partial (IsoFunctor) import Data.Eq (Eq) import Data.Char (Char) infixl 3 <|> infixr 6 <*> class ProductFunctor f where (<*>) :: f alpha -> f beta -> f (alpha, beta) class Alternative f where (<|>) :: f alpha -> f alpha -> f alpha empty :: f alpha class (IsoFunctor delta, ProductFunctor delta, Alternative delta) => Syntax delta where -- (<$>) :: Iso alpha beta -> delta alpha -> delta beta -- (<*>) :: delta alpha -> delta beta -> delta (alpha, beta) -- (<|>) :: delta alpha -> delta alpha -> delta alpha -- empty :: delta alpha pure :: Eq alpha => alpha -> delta alpha token :: delta Char