module Language.PureScript.Ide.Prim (idePrimDeclarations) where
import Protolude
import qualified Data.Map as Map
import qualified Data.Set as Set
import qualified Language.PureScript as P
import qualified Language.PureScript.Constants as C
import qualified Language.PureScript.Environment as PEnv
import Language.PureScript.Ide.Types
idePrimDeclarations :: [(P.ModuleName, [IdeDeclarationAnn])]
idePrimDeclarations =
[ ( C.Prim
, mconcat [primTypes, primKinds, primClasses]
)
, ( C.PrimOrdering
, mconcat [primOrderingTypes, primOrderingKinds]
)
, ( C.PrimRow
, mconcat [primRowTypes, primRowClasses]
)
, ( C.PrimRowList
, mconcat [primRowListTypes, primRowListClasses, primRowListKinds]
)
, ( C.PrimSymbol
, mconcat [primSymbolTypes, primSymbolClasses]
)
, ( C.PrimTypeError
, mconcat [primTypeErrorTypes, primTypeErrorClasses, primTypeErrorKinds]
)
]
where
annType tys = foreach (Map.toList tys) $ \(tn, (kind, _)) ->
IdeDeclarationAnn emptyAnn (IdeDeclType (IdeType (P.disqualify tn) kind []))
annClass cls = foreach (Map.toList cls) $ \(cn, _) ->
IdeDeclarationAnn emptyAnn (IdeDeclTypeClass (IdeTypeClass (P.disqualify cn) P.kindType []) )
removeClasses types classes =
Map.difference types (Map.mapKeys (map P.coerceProperName) classes)
primTypes = annType (removeClasses PEnv.primTypes PEnv.primClasses)
primOrderingTypes = annType PEnv.primOrderingTypes
primRowTypes = annType (removeClasses PEnv.primRowTypes PEnv.primRowClasses)
primRowListTypes = annType (removeClasses PEnv.primRowListTypes PEnv.primRowListClasses)
primSymbolTypes = annType (removeClasses PEnv.primSymbolTypes PEnv.primSymbolClasses)
primTypeErrorTypes = annType (removeClasses PEnv.primTypeErrorTypes PEnv.primTypeErrorClasses)
primClasses = annClass PEnv.primClasses
primRowClasses = annClass PEnv.primRowClasses
primRowListClasses = annClass PEnv.primRowListClasses
primSymbolClasses = annClass PEnv.primSymbolClasses
primTypeErrorClasses = annClass PEnv.primTypeErrorClasses
primKinds = foreach (Set.toList PEnv.primKinds) $ \kn ->
IdeDeclarationAnn emptyAnn (IdeDeclKind (P.disqualify kn))
primOrderingKinds = foreach (Set.toList PEnv.primOrderingKinds) $ \kn ->
IdeDeclarationAnn emptyAnn (IdeDeclKind (P.disqualify kn))
primRowListKinds = foreach (Set.toList PEnv.primRowListKinds) $ \kn ->
IdeDeclarationAnn emptyAnn (IdeDeclKind (P.disqualify kn))
primTypeErrorKinds = foreach (Set.toList PEnv.primTypeErrorKinds) $ \kn ->
IdeDeclarationAnn emptyAnn (IdeDeclKind (P.disqualify kn))