Skip to content

Instantly share code, notes, and snippets.

@jjlumagbas
Created October 19, 2016 04:08
Show Gist options
  • Save jjlumagbas/e7f1437d8ba1fa774f60e4fb1c40e28c to your computer and use it in GitHub Desktop.
Save jjlumagbas/e7f1437d8ba1fa774f60e4fb1c40e28c to your computer and use it in GitHub Desktop.
Shapes module
module Shapes
( Point(..)
, Shape(..)
, surface
, nudge
, baseCircle
, baseRect
) where
data Point = Point Float Float deriving (Show)
data Shape = Circle Point Float | Rectangle Point Point deriving (Show)
surface :: Shape -> Float
surface (Circle _ r) = pi * r ^ 2
surface (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 width height = Rectangle (Point 0 0) (Point width height)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment