Skip to content

Instantly share code, notes, and snippets.

@mizukmb
Last active July 15, 2017 10:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mizukmb/8e658e29174bcf237806f57e24da2830 to your computer and use it in GitHub Desktop.
Save mizukmb/8e658e29174bcf237806f57e24da2830 to your computer and use it in GitHub Desktop.
module Shapes (Point, Shape, area, nudge, baseCircle, baseRect) where
-- data Shape = Circle Float Float Float |
-- Rectangle Float Float Float Float
-- 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 x1 y1 x2 y2) = (abs $ x2 - x1) * (abs $ y2 - y1)
area :: Shape -> Float
area (Circle _ r) = pi * r ^ 2
area (Rectangle (Point x1 y1) (Point x2 y2)) = (abs $ x2 - x1) * (abs $ y2 - y1)
baseCircle :: Float -> Shape
baseCircle r = Circle (Point 0 0) r
baseRect :: Float -> Float -> Shape
baseRect w h = Rectangle (Point 0 0) (Point w h)
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))
@mizukmb
Copy link
Author

mizukmb commented Jul 15, 2017

module Shapes (Point(..), Shape(..), ...) と書けば値コンストラクタもエクスポートされる

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment