packages feed

HaRe-0.8.0.0: test/testdata/LiftToToplevel/Where2.hs

module LiftToToplevel.Where1 where

import Data.Tree.DUAL.Internal
import Data.Semigroup
import           Data.List.NonEmpty (NonEmpty (..))
import qualified Data.List.NonEmpty as NEL

unpack = undefined

foldDUALNE :: (Semigroup d, Monoid d)
           => (d -> l -> r) -- ^ Process a leaf datum along with the
                            --   accumulation of @d@ values along the
                            --   path from the root
           -> r             -- ^ Replace @LeafU@ nodes
           -> (NonEmpty r -> r)  -- ^ Combine results at a branch node
           -> (d -> r -> r)      -- ^ Process an internal d node
           -> (a -> r -> r)      -- ^ Process an internal datum
           -> DUALTreeNE d u a l -> r
foldDUALNE  = foldDUALNE' (Option Nothing)
  where
    foldDUALNE' dacc lf lfU con down ann (Concat ts)
      = con (NEL.map (foldDUALNE' dacc lf lfU con down ann . snd . unpack) ts)