caml-parser-0.1.0.0: src/MLQE/Syntax.hs
{-# LANGUAGE OverloadedStrings #-}
module MLQE.Syntax where
import CamlParser.Syntax.Expr
import CamlParser.Syntax.Pattern
import CamlParser.Syntax.Type
import CamlParser.Syntax.Decl
-- | MLQE-specific declaration extension
data MLQEDecl
= QDefAbstract String (Maybe TypeExpr) -- name, optional type
| QDefConcrete String QExpr -- name, quantum expression
| QDefParamAbstract String TypeExpr TypeExpr -- name, param type, result type
deriving (Eq, Show)
-- | Quantum expression
data QExpr
= QVar String
| QSeq QExpr QExpr -- @
| QTensor QExpr QExpr -- *
| QId
| QParam String Expr -- name(classical_expr)
deriving (Eq, Show)
-- We encode MLQE declarations in the generic extension mechanism
-- by storing them as DExt with a tag.
mlqeTag :: String
mlqeTag = "mlqe"