module Language.PureScript.Bridge.PSTypes where
import Control.Lens (views)
import Data.Monoid
import qualified Data.Text as T
import Control.Monad.Reader.Class
import Language.PureScript.Bridge.Builder
import Language.PureScript.Bridge.TypeInfo
psArray :: MonadReader BridgeData m => m PSType
psArray = TypeInfo "purescript-prim" "Prim" "Array" <$> psTypeParameters
psBool :: PSType
psBool = TypeInfo {
_typePackage = "purescript-prim"
, _typeModule = "Prim"
, _typeName = "Boolean"
, _typeParameters = []
}
psEither :: MonadReader BridgeData m => m PSType
psEither = TypeInfo "purescript-either" "Data.Either" "Either" <$> psTypeParameters
psInt :: PSType
psInt = TypeInfo {
_typePackage = "purescript-prim"
, _typeModule = "Prim"
, _typeName = "Int"
, _typeParameters = []
}
psMaybe :: MonadReader BridgeData m => m PSType
psMaybe = TypeInfo "purescript-maybe" "Data.Maybe" "Maybe" <$> psTypeParameters
psString :: PSType
psString = TypeInfo {
_typePackage = "purescript-prim"
, _typeModule = "Prim"
, _typeName = "String"
, _typeParameters = []
}
psTuple :: MonadReader BridgeData m => m PSType
psTuple = do
size <- views (haskType . typeParameters) length
let
tupleModule = if size == 2 then "Data.Tuple" else "Data.Tuple.Nested"
tupleName = "Tuple" <> if size == 2 then "" else T.pack (show size)
TypeInfo "purescript-tuples" tupleModule tupleName <$> psTypeParameters
psUnit :: PSType
psUnit = TypeInfo {
_typePackage = "purescript-prelude"
, _typeModule = "Prelude"
, _typeName = "Unit"
, _typeParameters = []
}