-
Notifications
You must be signed in to change notification settings - Fork 0
/
chap2.hs
29 lines (27 loc) · 1.24 KB
/
chap2.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
{-
- For this exercise, we are dealing with a type for colours of the rainbow
- The typeclass is defined here, and note its English spelling.
- For more information on how this is done, look ahead to:
- http://learnyouahaskell.com/making-our-own-types-and-typeclasses
-
- Have a play with the Colour in ghci, try the succ and pred functions and so on.
-}
data Colour = Red | Orange | Yellow | Green | Blue | Indigo | Violet
deriving (Eq, Ord, Show, Bounded, Enum)
{-
- The Colour typeclass is of type Ord
- What is the "first" (or least) colour
-}
firstColour = minBound :: Colour
-- List the colours in reverse order
reverseColourOrder = reverse [(minBound :: Colour)..(maxBound :: Colour)]
reverseColourOrder' = reverse [minBound .. maxBound] :: [Colour]
{-
- Mix two colours together, to produce the average value of the two.
- Example: paintMix Orange Green = Yellow
- If necessary, favour the "higher" value when computing the average.
- For example: paintMix Green Violet = Indigo
- Hint: Integer division can be performed with the quot function: quot 7 2 = 3
-}
paintMix c1 c2 = [c1..c2] !! (quot (length [c1..c2]) 2)
paintMix' c1 c2 = [(min c1 c2) .. (max c1 c2)]!!(quot (length[(min c1 c2) .. (max c1 c2)]) 2)