PLFA agda exercises
------------------------------------------------------------------------
-- The Agda standard library
--
-- 1 dimensional pretty printing of binary trees
------------------------------------------------------------------------

{-# OPTIONS --cubical-compatible --sized-types #-}

open import Level using (Level)
open import Data.List.Base as List using (List; []; [_]; _∷_; _∷ʳ_)
open import Data.String.Base using (String)
import Data.Tree.Rose as Rose
import Data.Tree.Rose.Show as Rose
open import Data.Tree.Binary using (Tree; map)
open import Function.Base using (_∘′_; id)

module Data.Tree.Binary.Show where

private
  variable
    a : Level
    N L : Set a

display : Tree (List String) (List String) → List String
display = Rose.display ∘′ Rose.fromBinary id id

show : (N → List String) → (L → List String) → Tree N L → List String
show nodeStr leafStr = display ∘′ map nodeStr leafStr

showSimple : (N → String) → (L → String) → Tree N L → List String
showSimple nodeStr leafStr = show ([_] ∘′ nodeStr) ([_] ∘′ leafStr)