polyglot-0.1.1.0: src/SyntaxTrees/Scala/Common.hs
module SyntaxTrees.Scala.Common where
import Data.List (intercalate)
newtype Var
= Var String
newtype Ctor
= Ctor String
newtype VarOp
= VarOp String
newtype CtorOp
= CtorOp String
newtype TypeClass
= TypeClass String
newtype Package
= Package [String]
data Literal
= UnitLit
| BoolLit Bool
| IntLit String
| FloatLit String
| CharLit Char
| StringLit String
data Modifier
= Implicit
| Lazy
| Abstract
| Private
| Public
| Protected
| Override
| Sealed
| Open
data QVar
= QVar (Maybe Package) Var
data QCtor
= QCtor (Maybe Package) Ctor
data QVarOp
= QVarOp (Maybe Package) VarOp
data QCtorOp
= QCtorOp (Maybe Package) CtorOp
data QTypeClass
= QTypeClass (Maybe Package) TypeClass
instance Show Var where
show (Var x) = x
instance Show Ctor where
show (Ctor x) = x
instance Show VarOp where
show (VarOp x) = x
instance Show CtorOp where
show (CtorOp x) = x
instance Show TypeClass where
show (TypeClass x) = x
instance Show Package where
show (Package x) = intercalate "." x
instance Show Literal where
show UnitLit = "()"
show (BoolLit True) = "true"
show (BoolLit False) = "false"
show (IntLit x) = x
show (FloatLit x) = x
show (CharLit x) = show x
show (StringLit x) = show x
instance Show Modifier where
show Implicit = "implicit"
show Lazy = "lazy"
show Abstract = "abstract"
show Private = "private"
show Public = "public"
show Protected = "protected"
show Override = "override"
show Sealed = "sealed"
show Open = "open"
instance Show QVar where
show (QVar x y) = showQualified x y
instance Show QCtor where
show (QCtor x y) = showQualified x y
instance Show QVarOp where
show (QVarOp x y) = showQualified x y
instance Show QCtorOp where
show (QCtorOp x y) = showQualified x y
instance Show QTypeClass where
show (QTypeClass x y) = showQualified x y
showQualified :: (Show a, Show b) => Maybe a -> b -> String
showQualified x y = foldMap ((++ ".") . show) x ++ show y