CurryInfo: searchtree-unsafe-3.0.0 / Control.Search.SearchTree.Unsafe.showSearchTree

definition:
 
showSearchTree :: Show a => SearchTree a -> String
showSearchTree st = showsST [] st ""
 where
  -- `showsST ctxt <SearchTree>`, where `ctxt` is a stack of boolean flags
  -- indicating whether we show the last alternative of the respective
  -- level to enable drawing aesthetical corners
  showsST ctxt (Value  a) = indent ctxt . shows a      . nl
  showsST ctxt (Fail _)   = indent ctxt . showChar '!' . nl
  showsST ctxt (Or t1 t2) = indent ctxt . showChar '?' . nl
                          . showsST (False : ctxt) t1
                          . showsST (True  : ctxt) t2

  indent []     = id
  indent (i:is) = showString (concatMap showIndent $ reverse is)
                . showChar   (if i then llc else lmc)
                . showString (hbar : " ")
    where showIndent isLast = (if isLast then ' ' else vbar) : "  "

  vbar = '\x2502' -- vertical bar
  hbar = '\x2500' -- horizontal bar
  llc  = '\x2514' -- left lower corner
  lmc  = '\x251c' -- left middle corner

  nl           = showChar '\n'
  shows x      = showString (show x)
  showChar c   = (c:)
  showString s = (s++)
demand:
 argument 2
deterministic:
 deterministic operation
documentation:
 
Shows the search tree as an intended line structure
failfree:
 (_, _)
indeterministic:
 might be indeterministic
infix:
 no fixity defined
iotype:
 {(_,_) |-> _}
name:
 showSearchTree
precedence:
 no precedence defined
result-values:
 _
signature:
 Prelude.Show a => SearchTree a -> String
solution-complete:
 operation might suspend on free variables
terminating:
 yes
totally-defined:
 reducible on all ground data terms