grammar :: Test (Parser Test String) -> Test (Parser Test String)
grammar Test{..} = Test{
   amb = ambiguous (Xy1 <$> string "x" <*> moptional (string "y")
                    <|> Xy2 <$> amb <*> string "y"
                    <|> Xyz <$> amb <*> string "z"
                    <|> Xyzw <$> amb <*> string "w")
   }
grammar :: Test (Parser Test String) -> Test (Parser Test String)
grammar Test{..} = Test{
   amb = ambiguous (Xy1 <$> string "x" <*> moptional (string "y")
                    <|> Xy2 <$> amb <*> string "y"
                    <|> Xyz <$> amb <*> string "z"
                    <|> Xyzw <$> amb <*> string "w")
   }
grammar Test{..} = Test{
   amb = ambiguous (Xy1 <$> string "x" <*> moptional (string "y")
                    <|> Xy2 <$> amb <*> string "y"
                    <|> Xyz <$> amb <*> string "z"
                    <|> Xyzw <$> amb <*> string "w")
   }