module Language.Grammars.Grammar.AG where
import Language.Grammars.Grammar
import Control.Applicative
instance Idiomatic l env f g => Idiomatic l env (a -> f) (Symbol a TAttT env -> g) where
idiomatic isf is = idiomatic (isf <*> (sym is :: PreProductions l env a))
instance Idiomatic l env f g => Idiomatic l env (DTerm String -> f) (Kw -> g) where
idiomatic isf (Kw is) = idiomatic (isf <*> (tr is))
newtype SF a = SF { unSF :: a }
instance Idiomatic l env f g => Idiomatic l env (a -> f) (SF a -> g) where
idiomatic isf (SF f) = idiomatic (isf <*> (pure f :: PreProductions l env a))