module PureScript.Bridge (
bridgeSumType
, defaultBridge
) where
import Data.Text (Text)
import qualified Data.Text as T
import Data.Monoid
import PureScript.Bridge.SumType
import PureScript.Bridge.TypeInfo
import PureScript.Bridge.Tuple
import PureScript.Bridge.Primitives
import Control.Applicative
import Data.Maybe
bridgeSumType :: TypeBridge -> SumType -> SumType
bridgeSumType br (SumType t cs) = SumType t . map (bridgeConstructor br) $ cs
doBridge :: TypeBridge -> TypeInfo -> TypeInfo
doBridge br info = let
translated = info { typePackage = "" }
res = fromMaybe translated (br info)
in
res {
typeParameters = map (doBridge br) . typeParameters $ res
}
defaultBridge :: TypeBridge
defaultBridge t = stringBridge t
<|> listBridge t
<|> maybeBridge t
<|> eitherBridge t
<|> intBridge t
<|> tupleBridge t
bridgeConstructor :: TypeBridge -> DataConstructor -> DataConstructor
bridgeConstructor br (DataConstructor name (Left infos)) =
DataConstructor name . Left $ map (doBridge br) infos
bridgeConstructor br (DataConstructor name (Right record)) =
DataConstructor name . Right $ map (bridgeRecordEntry br) record
bridgeRecordEntry :: TypeBridge -> RecordEntry -> RecordEntry
bridgeRecordEntry br (RecordEntry label value) = RecordEntry label $ doBridge br value