module Hydra.Langs.Json.Language where

import Hydra.Core
import Hydra.Coders
import Hydra.Strip
import Hydra.Mantle

import qualified Data.Set as S


jsonLanguage :: Language
jsonLanguage :: Language
jsonLanguage = LanguageName -> LanguageConstraints -> Language
Language (String -> LanguageName
LanguageName String
"hydra/langs/json") (LanguageConstraints -> Language)
-> LanguageConstraints -> Language
forall a b. (a -> b) -> a -> b
$ LanguageConstraints {
  languageConstraintsEliminationVariants :: Set EliminationVariant
languageConstraintsEliminationVariants = Set EliminationVariant
forall a. Set a
S.empty,
  languageConstraintsLiteralVariants :: Set LiteralVariant
languageConstraintsLiteralVariants = [LiteralVariant] -> Set LiteralVariant
forall a. Ord a => [a] -> Set a
S.fromList [
    LiteralVariant
LiteralVariantBoolean, LiteralVariant
LiteralVariantFloat, LiteralVariant
LiteralVariantInteger, LiteralVariant
LiteralVariantString],
  languageConstraintsFloatTypes :: Set FloatType
languageConstraintsFloatTypes = [FloatType] -> Set FloatType
forall a. Ord a => [a] -> Set a
S.fromList [FloatType
FloatTypeBigfloat],
  languageConstraintsFunctionVariants :: Set FunctionVariant
languageConstraintsFunctionVariants = Set FunctionVariant
forall a. Set a
S.empty,
  languageConstraintsIntegerTypes :: Set IntegerType
languageConstraintsIntegerTypes = [IntegerType] -> Set IntegerType
forall a. Ord a => [a] -> Set a
S.fromList [IntegerType
IntegerTypeBigint],
  languageConstraintsTermVariants :: Set TermVariant
languageConstraintsTermVariants = [TermVariant] -> Set TermVariant
forall a. Ord a => [a] -> Set a
S.fromList [
    TermVariant
TermVariantList,
    TermVariant
TermVariantLiteral,
    TermVariant
TermVariantMap,
    TermVariant
TermVariantOptional,
    TermVariant
TermVariantRecord],
  languageConstraintsTypeVariants :: Set TypeVariant
languageConstraintsTypeVariants = [TypeVariant] -> Set TypeVariant
forall a. Ord a => [a] -> Set a
S.fromList [
    TypeVariant
TypeVariantList,
    TypeVariant
TypeVariantLiteral,
    TypeVariant
TypeVariantMap,
    TypeVariant
TypeVariantOptional,
    TypeVariant
TypeVariantRecord],
  languageConstraintsTypes :: Type -> Bool
languageConstraintsTypes = \Type
typ -> case Type -> Type
stripType Type
typ of
    TypeOptional (TypeOptional Type
_) -> Bool
False
    Type
_ -> Bool
True }