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

import qualified Data.Text as T

import Language.PureScript.Bridge.TypeInfo
import Language.PureScript.Bridge.PSTypes (psTuple)


tupleBridge :: TypeBridge
tupleBridge = mkBridgeTo1 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 :: TypeInfo -> Bool
isTuple = (== Tuple) . T.foldl' step Start . typeName