module Axel.Haskell.Language where

import Data.Char (isSymbol)

-- https://stackoverflow.com/questions/10548170/what-characters-are-permitted-for-haskell-operators
isOperator :: String -> Bool
isOperator =
  all $ \x -> isSymbol x || x `elem` map fst haskellOperatorSymbols || x == ','

haskellOperatorSymbols :: [(Char, String)]
haskellOperatorSymbols =
  [ (':', "axelSymbolColon")
  , ('!', "axelSymbolBang")
  , ('#', "axelSymbolHash")
  , ('$', "axelSymbolDollar")
  , ('%', "axelSymbolPercent")
  , ('&', "axelSymbolAmpersand")
  , ('+', "axelSymbolPlus")
  , ('*', "axelSymbolAsterisk")
  , ('/', "axelSymbolSlash")
  , ('<', "axelSymbolLess")
  , ('>', "axelSymbolGreater")
  , ('=', "axelSymbolEquals")
  , ('\\', "axelSymbolBackslash")
  , ('@', "axelSymbolAt")
  , ('?', "axelSymbolQuestion")
  , ('^', "axelSymbolCaret")
  , ('-', "axelSymbolDash")
  , ('|', "axelSymbolPipe")
  , ('~', "axelSymbolTilde")
  , ('.', "axelSymbolDot")
  ]

haskellSyntaxSymbols :: [(Char, String)]
haskellSyntaxSymbols =
  [ (',', "axelSymbolComma")
  , (';', "axelSymbolSemicolon")
  , ('[', "axelSymbolLeftBracket")
  , (']', "axelSymbolRightBracket")
  , ('{', "axelSymbolLeftBrace")
  , ('}', "axelSymbolRightBrace")
  , ('`', "axelSymbolGrave")
  ]