module IslandLSystem ( IslandModule (..), islandLSystem, islandInterpretation, ) where import LSystem import Turtle data IslandModule = IslandLineWidth Double | IslandMove Double | IslandF Double | IslandL | IslandR islandLSystem :: LSystem IslandModule islandLSystem = LSystem (map LPrim [IslandLineWidth 5, IslandL, IslandL, IslandMove 100, IslandR, IslandMove 100, IslandR] ++ (take 8 $ cycle [LPrim (IslandF 200.0), LPrim IslandR])) rules where rules (IslandF len) = [f, r, f, l, f, l, f, f, r, f, r, f, l, f] where f = LPrim $ IslandF (len/4) l = LPrim IslandL r = LPrim IslandR rules m = [LPrim m] islandInterpretation :: IslandModule -> [LPrim TurtleModule] islandInterpretation m = case m of IslandLineWidth wid -> [LPrim $ TSetLineWidth wid] IslandF len -> [LPrim $ TDraw len] IslandMove len -> [LPrim $ TMove len] IslandL -> [LPrim (TTurnLeft 90)] IslandR -> [LPrim (TTurnRight 90)]