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