packages feed

fudgets-0.18.3: Demos/graph/Show.hs

module Show(show_Exp,show_Cmds,show_Cmd,showf,showp) where
import Exp
import Ops
import Numeric(showGFloat)
import Compat(mix)
--import Printf -- From hbc_library, comment out if not compiling with hbc.

--- hbc version:
--showf x = printf "%.5g" [UDouble x]
--showp (x,y) = printf "(%.5g,%.5g)" [UDouble x,UDouble y]
--- standard version:
--showf = show
showf x = showGFloat (Just 5) x ""
showp (x,y) = "("++show x++","++show y++")"
---

show_Cmds cmds = mix (map show_Cmd cmds) ", "

show_Cmd cmd =
  case cmd of
    Fun e -> show_Exp e
    Approx a n e -> "A "++show_Approx a++" "++show n++" "++show_Exp e

show_Approx Trapets = "t"
show_Approx RectO = "o"
show_Approx RectU = "u"

--show_Exps es = mix (map show_Exp es) ", "
show_Exp e =
  case e of
     Binop Badd e1 e2 -> show_Exp e1 ++ show_Bop Badd ++ show_Exp e2
     Binop bop e1 e2 | bop `elem` addopt -> show_Exp e1 ++ show_Bop bop ++ show_term e2
     Unop uop e | uop==Uneg -> show_Uop Uneg ++ show_term e
     _ -> show_term e

show_term e =
  case e of
     Binop bop e1 e2 | bop `elem` mulopt -> show_term e1 ++ show_Bop bop ++ show_power e2
     _ -> show_power e

show_power e =
  case e of
    Pow b n -> show_aexp b ++ "^" ++ show n
    _ -> show_aexp e

show_aexp e =
  case e of
     Var -> "x"
     Const x -> show x
     Unop uop e | uop/=Uneg -> show_Uop uop ++ show_argexp e
     e -> "(" ++ show_Exp e ++ ")"


show_argexp e =
  case show_aexp e of
     s@('(' : _) -> s
     s -> " " ++ s