module Language.PureScript.Sugar.Operators.Binders where

import Prelude ()
import Prelude.Compat

import Language.PureScript.AST
import Language.PureScript.Names
import Language.PureScript.Sugar.Operators.Common

matchBinderOperators :: [[(Qualified Ident, Associativity)]] -> Binder -> Binder
matchBinderOperators = matchOperators isBinOp extractOp fromOp reapply id
  where

  isBinOp :: Binder -> Bool
  isBinOp BinaryNoParensBinder{} = True
  isBinOp _ = False

  extractOp :: Binder -> Maybe (Binder, Binder, Binder)
  extractOp (BinaryNoParensBinder op l r) = Just (op, l, r)
  extractOp _ = Nothing

  fromOp :: Binder -> Maybe (Qualified Ident)
  fromOp (OpBinder q@(Qualified _ (Op _))) = Just q
  fromOp _ = Nothing

  reapply :: Qualified Ident -> Binder -> Binder -> Binder
  reapply = BinaryNoParensBinder . OpBinder