--
data Day = Sun | Mon | Tue | Wed | Thu | Fri | Sat
 deriving Eq
valday 0 = Sun
valday 1 = Mon
valday 2 = Tue
valday 3 = Wed
valday 4 = Thu
valday 5 = Fri
valday 6 = Sat
dayvalA x =
 case x of
 Sun -> 0
 Mon -> 1
 Tue -> 2
 Wed -> 3 ; Thu -> 4 ; Fri -> 5
 Sat -> 6
dayval Sun = 0
dayval Mon = 1
dayval Tue = 2
dayval Wed = 3
dayval Thu = 4
dayval Fri = 5
dayval Sat = 6
dayvalB :: Day -> Int
dayvalB x =
 let (d,n) = head (filter (\(d,n)->d==x)
 (zip [Sun,Mon,Tue,Wed,Thu,Fri,Sat]
 [0..]))
 in n
dayafter d =
 valday (((dayval d) + 1) `mod` 7)
data Move = Paper | Rock | Scissors
beats :: Move -> Move
beats Paper = Scissors
beats Rock = Paper
beats Scissors = Rock
-- data Bool = True | False
data Direction = North | East | South | West
data Tagger = Tagn Int | Tagb Bool
number (Tagn n) = n
boolean (Tagb b) = b
isNum (Tagn _) = True
isNum (Tagb _) = False
data Temp = Celsius Float
 | Fahrenheit Float
 | Kelvin Float
toKelvin :: Temp -> Temp
toKelvin (Celsius c) = Kelvin(c + 272.0)
toKelvin (Fahrenheit f) =
 Kelvin( (f - 32.0) * (5.0/9.0) + 272.0 )
toKelvin (Kelvin k) = Kelvin k
data Shape = Rectangle Float Float
 | Ellipse Float Float
 | RtTriangle Float Float
 | Polygon [ (Float,Float) ]
 deriving Show
circle radius = Ellipse radius radius
square side = Rectangle side side
area :: Shape -> Float
area (Rectangle s1 s2) = s1 * s2
area (Ellipse r1 r2) = pi * r1 * r2
area (RtTriangle s1 s2) = (s1 *s2) / 2
area (Polygon (v1:pts)) = polyArea pts
 where polyArea :: [ (Float,Float) ] -> Float
 polyArea (v2 : v3 : vs) = triArea v1 v2 v3 +
 polyArea (v3:vs)
 polyArea _ = 0
triArea v1 v2 v3 =
 let a = distBetween v1 v2
 b = distBetween v2 v3
 c = distBetween v3 v1
 s = 0.5*(a+b+c)
 in sqrt (s*(s-a)*(s-b)*(s-c))
distBetween (x1,y1) (x2,y2)
 = sqrt ((x1-x2)^2 + (y1-y2)^2)
-- 

AltStyle によって変換されたページ (->オリジナル) /