Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

66 lines (49 sloc) 1.323 kb
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE DeriveDataTypeable #-}
-- | A simple Turtle-graphics demonstration for modeling the location of a turtle.
--
-- This is based on the code presented by Seth Tisue at the Boston Area Scala
-- Enthusiasts meeting during his lens talk.
--
-- Usage:
--
-- > def & forward 10 & down & color .~ red % turn (pi/2) & forward 5
module Turtle where
import Control.Lens hiding (up, down)
import Data.Default
data Point = Point
{ _x, _y :: Double
} deriving (Eq,Show)
makeClassy ''Point
instance Default Point where
def = Point def def
data Color = Color
{ _r, _g, _b :: Int
} deriving (Eq,Show)
makeClassy ''Color
red :: Color
red = Color 255 0 0
instance Default Color where
def = Color def def def
data Turtle = Turtle
{ _tPoint :: Point
, _tColor :: Color
, _heading :: Double
, _penDown :: Bool
} deriving (Eq,Show)
makeClassy ''Turtle
instance Default Turtle where
def = Turtle def def def False
instance HasPoint Turtle where
point = tPoint
instance HasColor Turtle where
color = tColor
forward :: Double -> Turtle -> Turtle
forward d t =
t & y +~ d * cos (t^.heading)
& x +~ d * sin (t^.heading)
turn :: Double -> Turtle -> Turtle
turn d = heading +~ d
up, down :: Turtle -> Turtle
up = penDown .~ False
down = penDown .~ True
Jump to Line
Something went wrong with that request. Please try again.