purescript-bridge-0.3.1.0: src/Language/PureScript/Bridge/PSTypes.hs
{-# LANGUAGE OverloadedStrings #-}
-- | PureScript types to be used for bridges, e.g. in "Language.PureScript.Bridge.Primitives".
module Language.PureScript.Bridge.PSTypes where
import Data.Monoid
import qualified Data.Text as T
import Language.PureScript.Bridge.TypeInfo
-- | Uses type parameters from existing TypeInfo:
psArray :: TypeInfo -> TypeInfo
psArray t = t {
typePackage = "purescript-prim"
, typeModule = "Prim"
, typeName = "Array"
}
psBool :: TypeInfo
psBool = TypeInfo {
typePackage = "purescript-prim"
, typeModule = "Prim"
, typeName = "Boolean"
, typeParameters = []
}
-- | Uses type parameters from existing TypeInfo:
psEither :: TypeInfo -> TypeInfo
psEither t = t {
typePackage = "purescript-either"
, typeModule = "Data.Either"
, typeName = "Either"
}
psInt :: TypeInfo
psInt = TypeInfo {
typePackage = "purescript-prim"
, typeModule = "Prim"
, typeName = "Int"
, typeParameters = []
}
-- | Uses type parameters from existing TypeInfo:
psMaybe :: TypeInfo -> TypeInfo
psMaybe t = t {
typePackage = "purescript-maybe"
, typeModule = "Data.Maybe"
, typeName = "Maybe"
}
psString :: TypeInfo
psString = TypeInfo {
typePackage = "purescript-prim"
, typeModule = "Prim"
, typeName = "String"
, typeParameters = []
}
-- | Uses type parameters from existing TypeInfo:
psTuple :: TypeInfo -> TypeInfo
psTuple t = t {
typePackage = "purescript-tuples"
, typeModule = if size == 2 then "Data.Tuple" else "Data.Tuple.Nested"
, typeName = "Tuple" <> if size == 2 then "" else T.pack (show size)
}
where
size = length (typeParameters t)
psUnit :: TypeInfo
psUnit = TypeInfo {
typePackage = "purescript-prelude"
, typeModule = "Prelude"
, typeName = "Unit"
, typeParameters = []
}