{-# LANGUAGE OverloadedStrings #-}
module Language.PureScript.Bridge.Primitives where


import Language.PureScript.Bridge.TypeInfo
import Language.PureScript.Bridge.PSTypes


boolBridge :: TypeBridge
boolBridge = mkBridgeTo (eqTypeName "Bool") psBool

eitherBridge :: TypeBridge
eitherBridge = mkBridgeTo1 (eqTypeName "Either") psEither

intBridge :: TypeBridge
intBridge = mkBridgeTo (eqTypeName "Int") psInt

listBridge :: TypeBridge
listBridge = mkBridgeTo1 (eqTypeName "[]") psArray

maybeBridge :: TypeBridge
maybeBridge = mkBridgeTo1 (eqTypeName "Maybe") psMaybe

stringBridge :: TypeBridge
stringBridge = mkBridgeTo isStringLike psString
  where
    isStringLike t = isText t || isString t
    isText t = typeName t == "Text"
    isString t = typeName t == "[]" && all ((==) "Char" . typeName) (typeParameters t)

unitBridge :: TypeBridge
unitBridge = mkBridgeTo (eqTypeName "()") psUnit