Skip to content

Instantly share code, notes, and snippets.

@MiyamonY
Created February 26, 2015 06:35
Show Gist options
  • Save MiyamonY/4c1c500386b9a051dd82 to your computer and use it in GitHub Desktop.
Save MiyamonY/4c1c500386b9a051dd82 to your computer and use it in GitHub Desktop.
module Shapes
( Point (..),
Shape (..),
area,
nudge,
baseCircle,
baseRect ) where
-- data Bool = False | True
-- data Shape = Circle Float Float Float |
-- Rectangle Float Float Float Float
-- deriving (Show)
data Point = Point Float Float deriving (Show)
data Shape = Circle Point Float | Rectangle Point Point deriving (Show)
area :: Shape -> Float
area (Circle _ r) = pi * r ^ 2
area (Rectangle (Point x1 y1) (Point x2 y2)) = (abs $ x2 - x1) * (abs $ y2 - y1)
nudge :: Shape -> Float -> Float -> Shape
nudge (Circle (Point x y) r) a b = Circle (Point (x + a) (y + b)) r
nudge (Rectangle (Point x1 y1) (Point x2 y2)) a b =
Rectangle (Point (x1 + a) (y1 + b)) (Point (x2 + a) (y2 + b))
baseCircle :: Float -> Shape
baseCircle r = Circle (Point 0 0) r
baseRect :: Float -> Float -> Shape
baseRect a b = Rectangle (Point 0 0) (Point a b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment