module Unison.Syntax.ReservedWords
  ( keywords,
    typeModifiers,
    typeOrAbility,
    reservedOperators,
    delimiters,
  )
where

import Data.Set qualified as Set
import Unison.Prelude

keywords :: Set Text
keywords :: Set Text
keywords =
  [Text] -> Set Text
forall a. Ord a => [a] -> Set a
Set.fromList
    [ Text
"@rewrite",
      Text
"alias",
      Text
"cases",
      Text
"do",
      Text
"else",
      Text
"false",
      Text
"forall",
      Text
"handle",
      Text
"if",
      Text
"let",
      Text
"match",
      Text
"namespace",
      Text
"termLink",
      Text
"then",
      Text
"true",
      Text
"typeLink",
      Text
"use",
      Text
"where",
      Text
"with",
      Text
"∀"
    ]
    Set Text -> Set Text -> Set Text
forall a. Semigroup a => a -> a -> a
<> Set Text
typeModifiers
    Set Text -> Set Text -> Set Text
forall a. Semigroup a => a -> a -> a
<> Set Text
typeOrAbility

typeModifiers :: Set Text
typeModifiers :: Set Text
typeModifiers =
  [Text] -> Set Text
forall a. Ord a => [a] -> Set a
Set.fromList [Text
"structural", Text
"unique"]

typeOrAbility :: Set Text
typeOrAbility :: Set Text
typeOrAbility =
  [Text] -> Set Text
forall a. Ord a => [a] -> Set a
Set.fromList [Text
"type", Text
"ability"]

reservedOperators :: Set Text
reservedOperators :: Set Text
reservedOperators =
  [Text] -> Set Text
forall a. Ord a => [a] -> Set a
Set.fromList
    [ Text
"=",
      Text
"->",
      Text
":",
      Text
"&&",
      Text
"||",
      Text
"|",
      Text
"!",
      Text
"'",
      Text
"==>"
    ]

delimiters :: Set Char
delimiters :: Set Char
delimiters =
  [Char] -> Set Char
forall a. Ord a => [a] -> Set a
Set.fromList [Char]
"()[]{},?;"