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


import Language.PureScript.Bridge.TypeInfo

boolBridge :: TypeBridge
boolBridge t
  | eqTypeName "Bool" t = Just $ t {
      typePackage = "purescript-prim"
    , typeModule = "Prim"
    , typeName = "Boolean"
    , typeParameters = []
    }
  | otherwise = Nothing

intBridge :: TypeBridge
intBridge t
  | eqTypeName "Int" t = Just $ t {
      typePackage = "purescript-prim"
    , typeModule = "Prim"
    }
  | otherwise = Nothing


stringBridge :: TypeBridge
stringBridge t
  | isStringLike = Just $ t {
      typePackage = "purescript-prim"
    , typeModule = "Prim"
    , typeName = "String"
    , typeParameters = []
    }
  | otherwise = Nothing
  where
    isStringLike = isText || isString
    isText = typeName t == "Text"
    isString = typeName t == "[]" && all ((==) "Char" . typeName) (typeParameters t)

listBridge :: TypeBridge
listBridge t
  | eqTypeName "[]" t = Just $ t {
      typePackage = "purescript-prim"
    , typeModule = "Prim"
    , typeName = "Array"
    }
  | otherwise = Nothing

maybeBridge :: TypeBridge
maybeBridge t
  | eqTypeName "Maybe" t = Just $ t {
      typePackage = "purescript-maybe"
    , typeModule = "Data.Maybe"
    }
  | otherwise = Nothing


eitherBridge :: TypeBridge
eitherBridge t
  | eqTypeName "Either" t = Just $ t {
      typePackage = "purescript-either"
    , typeModule = "Data.Either"
    }
  | otherwise = Nothing