-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Haskell Lindenmayer Systems -- -- Haskell library for generating Lindemayer systems @package hls @version 0.14 -- | Standard Turtle graphics. module LSystem.Turtle -- | Turtle. data Turtle Turtle :: Double -> Double -> Pt Double -> Double -> Double -> Double -> [Turtle] -> Turtle -- | turning angle ta :: Turtle -> Double -- | turning angle increment tai :: Turtle -> Double -- | location loc :: Turtle -> Pt Double -- | heading hdg :: Turtle -> Double -- | line length ll :: Turtle -> Double -- | line length scalar lls :: Turtle -> Double -- | turtle stack stk :: Turtle -> [Turtle] -- | Right turn by ta. turnRight :: Turtle -> Turtle -- | Left turn by ta. turnLeft :: Turtle -> Turtle -- | 180 degree turn. turnBack :: Turtle -> Turtle -- | Increment line length (ll) by multiplying by line length scalar -- (lls). incrLine :: Turtle -> Turtle -- | Decrement line length (ll) by dividing by line length scalar -- (lls). decrLine :: Turtle -> Turtle -- | Move loc of Turtle by ll on current hdg. forward :: Turtle -> Turtle -- | Push Turtle onto stk. push :: Turtle -> Turtle -- | Fetch Turtle from stk. pop :: Turtle -> Turtle -- | Given state processing function f, a Turtle and an -- initial state, step Turtle and state. stepTurtle :: (t -> Pt R -> Pt R -> b) -> Turtle -> t -> (Turtle, b) -- | Lindenmayer system definition, expander and renderer. module LSystem.LSystem -- | Element of Axiom. type Element = Char -- | An axiom (sequence of Elements). type Axiom = [Element] -- | A Map from Elements to Axioms. type Rules = Map Element Axiom -- | An LSystem is an Axiom and a set of Rules. data LSystem LSystem :: Axiom -> Rules -> LSystem -- | L-System constructor. -- --
-- lSystem "F+F+F" [('F',"F-F+F")]
--
lSystem :: Axiom -> [(Element, [Element])] -> LSystem
-- | Rule lookup.
getRule :: Rules -> Element -> [Element]
-- | Rule application.
applyRule :: [Element] -> Rules -> [Element]
-- | n iterations of the specified LSystem.
--
--
-- expand (lSystem "F+F+F" [('F',"F-F+F")]) 1 == "F-F+F+F-F+F+F-F+F"
--
expand :: LSystem -> Int -> [Element]
-- | State transformer Turtle commands.
stateT :: Element -> Turtle -> Turtle
-- | Operational Turtle commands.
cmd :: (Turtle -> b -> (Turtle, b)) -> Element -> Turtle -> b -> (Turtle, b)
-- | Fold over an expanded L-system using standard turtle commands.
render :: b -> (b -> Pt R -> Pt R -> b) -> [Element] -> Turtle -> b
instance Eq LSystem
instance Show LSystem
-- | Postscript renderer for LSystems.
module LSystem.Render.PS
-- | Given initial ta, ls and lls values render
-- i steps of an LSystem.
renderL :: (LSystem, Double, Double) -> Int -> Double -> [Ln R]
-- | Draw output of renderL normalised, scaled to m and
-- translated by o.
draw :: R -> R -> [Ln R] -> Image
-- | Various LSystems. For l0 through lB see
-- http://paulbourke.net/fractals/lsys/. For lC see
-- http://en.wikipedia.org/wiki/Penrose_tiling. For lD see
-- http://hackage.haskell.org/package/nymphaea.
module LSystem.Systems
l0 :: LSystem
lB :: LSystem
lA :: LSystem
l9 :: LSystem
l8 :: LSystem
l7 :: LSystem
l6 :: LSystem
l5 :: LSystem
l4 :: LSystem
l3 :: LSystem
l2 :: LSystem
l1 :: LSystem
lC :: LSystem
lD :: LSystem
l0d :: (LSystem, Double, Double)
lDd :: (LSystem, Double, Double)
lCd :: (LSystem, Double, Double)
lBd :: (LSystem, Double, Double)
lAd :: (LSystem, Double, Double)
l9d :: (LSystem, Double, Double)
l8d :: (LSystem, Double, Double)
l7d :: (LSystem, Double, Double)
l6d :: (LSystem, Double, Double)
l5d :: (LSystem, Double, Double)
l4d :: (LSystem, Double, Double)
l3d :: (LSystem, Double, Double)
l2d :: (LSystem, Double, Double)
l1d :: (LSystem, Double, Double)
l0l :: [Ln R]
lDl :: [Ln R]
lCl :: [Ln R]
lBl :: [Ln R]
lAl :: [Ln R]
l9l :: [Ln R]
l8l :: [Ln R]
l7l :: [Ln R]
l6l :: [Ln R]
l5l :: [Ln R]
l4l :: [Ln R]
l3l :: [Ln R]
l2l :: [Ln R]
l1l :: [Ln R]
systems_l :: [[Ln R]]
systems_i :: [Image]
-- | Generate postscript file with drawings of l0 through lD.
--
-- -- systems_ps "/tmp/hls.ps" -- System.Process.system "gv /tmp/hls.ps" --systems_ps :: FilePath -> IO ()