module Language.PureScript.CST.Traversals where

import Prelude

import Language.PureScript.CST.Types (Separated(..))

everythingOnSeparated :: (r -> r -> r) -> (a -> r) -> Separated a -> r
everythingOnSeparated :: forall r a. (r -> r -> r) -> (a -> r) -> Separated a -> r
everythingOnSeparated r -> r -> r
op a -> r
k (Separated a
hd [(SourceToken, a)]
tl) = a -> [(SourceToken, a)] -> r
go a
hd [(SourceToken, a)]
tl
  where
  go :: a -> [(SourceToken, a)] -> r
go a
a [] = a -> r
k a
a
  go a
a ((SourceToken, a)
b : [(SourceToken, a)]
bs) = a -> r
k a
a r -> r -> r
`op` a -> [(SourceToken, a)] -> r
go (forall a b. (a, b) -> b
snd (SourceToken, a)
b) [(SourceToken, a)]
bs