{-# LANGUAGE OverloadedStrings, LambdaCase #-}

module Funcons.Core.Values.TypesBuiltin where

import Funcons.EDSL 
import qualified Funcons.Operations as VAL

library :: FunconLibrary
library = [(Name, EvalFunction)] -> FunconLibrary
libFromList [
    (Name
"datatype-values", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromNullaryValOp [Funcons] -> Funcons
datatype_values_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.datatype_values_)
  , (Name
"ground-values", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromNullaryValOp [Funcons] -> Funcons
ground_values_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.ground_values_)
  , (Name
"ground-vals", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromNullaryValOp [Funcons] -> Funcons
ground_values_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.ground_values_)
  , (Name
"types", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromNullaryValOp [Funcons] -> Funcons
types_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.types_)
  , (Name
"value-types", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromNullaryValOp [Funcons] -> Funcons
value_types_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.value_types_)
  , (Name
"empty-type", ([Funcons] -> Funcons)
-> ([OpExpr Funcons] -> OpExpr Funcons) -> EvalFunction
fromNullaryValOp [Funcons] -> Funcons
empty_type_ [OpExpr Funcons] -> OpExpr Funcons
forall t. HasValues t => [OpExpr t] -> OpExpr t
VAL.empty_type_)
  ]

datatype_values_ :: [Funcons] -> Funcons
datatype_values_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"datatype-values" 
ground_values_ :: [Funcons] -> Funcons
ground_values_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"ground-values"
ground_vals_ :: [Funcons] -> Funcons
ground_vals_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"ground-vals"
types_ :: [Funcons] -> Funcons
types_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"types"
value_types_ :: [Funcons] -> Funcons
value_types_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"value-types"
empty_type_ :: [Funcons] -> Funcons
empty_type_ = Name -> [Funcons] -> Funcons
applyFuncon Name
"empty-type"