packages feed

parsley-2.0.0.1: test/Parsley/Fold/Parsers.hs

{-# LANGUAGE CPP, TemplateHaskell #-}
{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-}
{-# HLINT ignore "Redundant bracket" #-}
module Parsley.Fold.Parsers where

import Prelude hiding (pure, (<*>), (*>), (<*))
import Parsley
import Parsley.Fold
import Parsley.Defunctionalized

#define QQ(x) (makeQ (x) [|| x ||])

plusOne :: Parser Int
plusOne = prefix (string "++" $> QQ(succ)) (char '1' $> LIFTED 1)

plusOne' :: Parser Int
plusOne' = prefix (try (string "++") $> QQ(succ)) (char '1' $> LIFTED 1)

plusOnePure :: Parser Int
plusOnePure = try (prefix (string "++" $> QQ(succ)) (pure (LIFTED 1))) <|> pure (LIFTED 0)

onePlus :: Parser Int
onePlus = postfix (char '1' $> LIFTED 1) (string "++" $> QQ(succ))

onePlus' :: Parser Int
onePlus' = postfix (char '1' $> LIFTED 1) (try (string "++") $> QQ(succ))

manyAA :: Parser [String]
manyAA = many (string "aa")

someA :: Parser String
someA = some (char 'a')

many2A :: Parser String
many2A = manyN 2 (char 'a')