packages feed

jsonnet-0.1.0.0: src/Language/Jsonnet/Core.hs

{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE GADTSyntax #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE StandaloneDeriving #-}

module Language.Jsonnet.Core where

import Data.Data (Data)
import Data.String
import Data.Typeable (Typeable)
import GHC.Generics (Generic)
import Language.Jsonnet.Common
import Language.Jsonnet.Parser.SrcSpan
import Unbound.Generics.LocallyNameless

type Param a = (Name a, Embed (Maybe a))

data KeyValue a = KeyValue a (Hideable a)
  deriving (Show, Typeable, Generic)

instance Alpha a => Alpha (KeyValue a)

newtype Fun = Fun (Bind (Rec [Param Core]) Core)
  deriving (Show, Typeable, Generic)

instance Alpha Fun

newtype Let
  = Let (Bind (Rec [(Name Core, Embed Core)]) Core)
  deriving (Show, Typeable, Generic)

instance Alpha Let

data Comp
  = ArrC (Bind (Name Core) (Core, Maybe Core))
  | ObjC (Bind (Name Core) (KeyValue Core, Maybe Core))
  deriving (Show, Typeable, Generic)

instance Alpha Comp

data Core
  = CLoc SrcSpan Core
  | CLit Literal
  | CVar (Name Core)
  | CFun Fun
  | CApp Core (Args Core)
  | CLet Let
  | CObj [KeyValue Core]
  | CArr [Core]
  | CBinOp BinOp Core Core
  | CUnyOp UnyOp Core
  | CIfElse Core Core Core
  | CErr Core
  | CLookup Core Core
  | CComp Comp Core
  deriving (Show, Typeable, Generic)

instance Alpha Core

--data Params
--  = EmptyPs
--  | ConsPs (Rebind (Name Core, Embed (Maybe Core)) Params)
--  deriving (Show, Typeable, Generic)
--instance Alpha Params

instance IsString (Name Core) where
  fromString = string2Name