{-# LANGUAGE DataKinds #-} {-# LANGUAGE OverloadedStrings #-} module Language.PureScript.Bridge.Tuple where import qualified Data.Text as T import Language.PureScript.Bridge.Builder import Language.PureScript.Bridge.PSTypes (psTuple) import Language.PureScript.Bridge.TypeInfo tupleBridge :: BridgePart tupleBridge = doCheck haskType isTuple >> psTuple data TupleParserState = Start | OpenFound | ColonFound | Tuple | NoTuple deriving (Eq, Show) step :: TupleParserState -> Char -> TupleParserState step Start '(' = OpenFound step Start _ = NoTuple step OpenFound ',' = ColonFound step OpenFound _ = NoTuple step ColonFound ',' = ColonFound step ColonFound ')' = Tuple step ColonFound _ = NoTuple step Tuple _ = NoTuple step NoTuple _ = NoTuple isTuple :: HaskellType -> Bool isTuple = (== Tuple) . T.foldl' step Start . _typeName