module Wave.Common where

import qualified Data.Map as M
import qualified Data.Text as T

type TypeVar = T.Text

type TypeCon = T.Text

type Label = T.Text

type Constr = T.Text

-- a record with keys of type String and values of type `a`, like
-- { x: 1, y: 2, z: 3 }
type Record a =
  M.Map Label a

-- a Data constructor
data Variant a
  = Variant Constr a
  deriving (Int -> Variant a -> ShowS
[Variant a] -> ShowS
Variant a -> String
(Int -> Variant a -> ShowS)
-> (Variant a -> String)
-> ([Variant a] -> ShowS)
-> Show (Variant a)
forall a. Show a => Int -> Variant a -> ShowS
forall a. Show a => [Variant a] -> ShowS
forall a. Show a => Variant a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Variant a] -> ShowS
$cshowList :: forall a. Show a => [Variant a] -> ShowS
show :: Variant a -> String
$cshow :: forall a. Show a => Variant a -> String
showsPrec :: Int -> Variant a -> ShowS
$cshowsPrec :: forall a. Show a => Int -> Variant a -> ShowS
Show, Variant a -> Variant a -> Bool
(Variant a -> Variant a -> Bool)
-> (Variant a -> Variant a -> Bool) -> Eq (Variant a)
forall a. Eq a => Variant a -> Variant a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Variant a -> Variant a -> Bool
$c/= :: forall a. Eq a => Variant a -> Variant a -> Bool
== :: Variant a -> Variant a -> Bool
$c== :: forall a. Eq a => Variant a -> Variant a -> Bool
Eq)