packages feed

packed-data-0.1.0.2: examples/Traversal.hs

{-# LANGUAGE BangPatterns #-}

module Traversal () where

import Data.Packed
import qualified Data.Packed.Reader as R
import Tree

$(mkPacked ''Tree [])

myTree :: Tree Int
myTree = Node (Leaf 1) (Leaf 2)

packedTree :: Packed '[Tree Int]
packedTree = pack myTree

sumPacked :: PackedReader '[Tree Int] r Int
sumPacked =
    caseTree
        ( R.do
            !n <- reader
            R.return n
        )
        ( R.do
            !left <- sumPacked
            !right <- sumPacked
            let !res = left + right
            R.return res
        )

runSum :: IO Int
runSum = do
    (res, _) <- runReader sumPacked packedTree
    return res