module SyntaxTrees.Haskell.Pattern where

import SyntaxTrees.Haskell.Common (Literal, QCtor, QCtorOp, Var)


data Pattern
  = CtorPattern
      { Pattern -> QCtor
ctor   :: QCtor
      , Pattern -> [Pattern]
fields :: [Pattern]
      }
  | InfixCtorPattern
      { Pattern -> QCtorOp
ctorOp :: QCtorOp
      , fields :: [Pattern]
      }
  | RecordPattern
      { ctor        :: QCtor
      , Pattern -> [(Var, Maybe Pattern)]
namedFields :: [(Var, Maybe Pattern)]
      }
  | WildcardRecordPattern
      { ctor        :: QCtor
      , namedFields :: [(Var, Maybe Pattern)]
      }
  | AliasedPattern Var Pattern
  | ListPattern [Pattern]
  | TuplePattern [Pattern]
  | VarPattern Var
  | LitPattern Literal
  | Wildcard
  deriving (Int -> Pattern -> ShowS
[Pattern] -> ShowS
Pattern -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Pattern] -> ShowS
$cshowList :: [Pattern] -> ShowS
show :: Pattern -> String
$cshow :: Pattern -> String
showsPrec :: Int -> Pattern -> ShowS
$cshowsPrec :: Int -> Pattern -> ShowS
Show)