{-# LANGUAGE OverloadedStrings #-}

module Hydra.Impl.Haskell.Sources.CoreLang where

import Hydra.All
import Hydra.Compute
import Hydra.Impl.Haskell.Dsl.Base as Base
import qualified Hydra.Impl.Haskell.Dsl.Terms as Terms
import qualified Hydra.Impl.Haskell.Dsl.Types as Types
import qualified Hydra.Impl.Haskell.Dsl.Standard as Standard
import Hydra.Impl.Haskell.Sources.Basics

import qualified Data.Set as S


coreLanguageNs :: Namespace
coreLanguageNs = String -> Namespace
Namespace String
"hydra/coreLang"

cl :: String -> Datum a -> Definition a
cl :: forall a. String -> Datum a -> Definition a
cl = forall a. Name -> Datum a -> Definition a
Definition forall b c a. (b -> c) -> (a -> b) -> a -> c
. Namespace -> String -> Name
fromQname Namespace
coreLanguageNs

coreLangModule :: Module Meta
coreLangModule :: Module Meta
coreLangModule = forall m.
Namespace -> [Element m] -> [Module m] -> Maybe String -> Module m
Module Namespace
coreLanguageNs forall {a}. [a]
elements [Module Meta
hydraBasicsModule] forall a. Maybe a
Nothing
  where
    elements :: [a]
elements = [
--      el defHydraCoreLanguage
      ]


----defHydraCoreLanguage :: Definition [Language]
--defHydraCoreLanguage :: Definition [LanguageConstraints m]
--defHydraCoreLanguage = cl "hydraCoreLanguage" $
--  doc "The trivial language of hydra/core, which admits all types and terms" $
----  nominal _Language $ ... [
----  lambda "m" $ record _LanguageConstraints [
--  record _LanguageConstraints [
--    "eliminationVariants">: set S.empty]

--ref eliminationVariantsSource


--hydraCoreLanguage :: Language m
--hydraCoreLanguage = Language (LanguageName "hydra/core") $ LanguageConstraints {
--  languageConstraintsEliminationVariants = S.fromList eliminationVariants,
--  languageConstraintsLiteralVariants = S.fromList literalVariants,
--  languageConstraintsFloatTypes = S.fromList floatTypes,
--  languageConstraintsFunctionVariants = S.fromList functionVariants,
--  languageConstraintsIntegerTypes = S.fromList integerTypes,
--  languageConstraintsTermVariants = S.fromList termVariants,
--  languageConstraintsTypeVariants = S.fromList typeVariants,
--  languageConstraintsTypes = const True }