{-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE NoMonomorphismRestriction #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TemplateHaskell #-} {-# OPTIONS_GHC -Wno-missing-signatures #-} module Grammar where import Data.Char (Char) import Data.String (String) import Text.Show (Show(..)) import qualified Data.Functor as Functor import qualified Grammar.Brainfuck import qualified Grammar.Nandlang import Symantic.Parser import qualified Symantic.Parser.Haskell as H rawGrammars :: Grammar Char repr => [repr String] rawGrammars = [ H.Term (H.ValueCode show [||show||]) <$> g1 , H.Term (H.ValueCode show [||show||]) <$> g2 , H.Term (H.ValueCode show [||show||]) <$> g3 , H.Term (H.ValueCode show [||show||]) <$> g4 , H.Term (H.ValueCode show [||show||]) <$> g5 , H.Term (H.ValueCode show [||show||]) <$> g6 , H.Term (H.ValueCode show [||show||]) <$> g7 , H.Term (H.ValueCode show [||show||]) <$> g8 , H.Term (H.ValueCode show [||show||]) <$> g9 , H.Term (H.ValueCode show [||show||]) <$> g10 , H.Term (H.ValueCode show [||show||]) <$> g11 , H.Term (H.ValueCode show [||show||]) <$> g12 , H.Term (H.ValueCode show [||show||]) <$> g13 , H.Term (H.ValueCode show [||show||]) <$> g14 , H.Term (H.ValueCode show [||show||]) <$> g15 , H.Term (H.ValueCode show [||show||]) <$> g16 ] grammars :: Grammar Char repr => [repr String] grammars = observeSharing Functor.<$> rawGrammars g1 = char 'a' g2 = string "abc" g3 = many (char 'a') g4 = some (string "abcd") g5 = some (string "abcd") <* eof g6 = traverse char "aa" <|> traverse char "ab" g7 = string "aa" <|> string "ab" g8 = many (char 'r') <* eof g9 = eof g10 = char 'a' <|> char 'b' g11 = many (char 'a') <* char 'b' g12 = many (oneOf ['a', 'b', 'c', 'd']) <* eof g13 = Grammar.Brainfuck.grammar g14 = Grammar.Nandlang.grammar g15 = (char 'a' <|> char 'b') <* char 'c' g16 = (char 'a' <|> char 'b' <|> char 'c') <* char 'd'