haskell: space-age

This commit is contained in:
2021-09-10 17:19:51 -04:00
parent b1ec5d6b16
commit 8d7392977c
9 changed files with 328 additions and 0 deletions

View File

@ -0,0 +1,16 @@
name: space-age
dependencies:
- base
library:
exposed-modules: SpaceAge
source-dirs: src
tests:
test:
main: Tests.hs
source-dirs: test
dependencies:
- space-age
- hspec

View File

@ -0,0 +1,16 @@
name: space-age
dependencies:
- base
library:
exposed-modules: SpaceAge
source-dirs: src
tests:
test:
main: Tests.hs
source-dirs: test
dependencies:
- space-age
- hspec

View File

@ -0,0 +1,24 @@
module SpaceAge (Planet(..), ageOn) where
data Planet = Mercury
| Venus
| Earth
| Mars
| Jupiter
| Saturn
| Uranus
| Neptune
ageOn :: Real a => Planet -> a -> Rational
ageOn planet seconds = toRational seconds / (earthPeriod * planetMultiplier)
where
planetMultiplier = case planet of
Mercury -> 0.2408467
Venus -> 0.61519726
Earth -> 1
Mars -> 1.8808158
Jupiter -> 11.862615
Saturn -> 29.447498
Uranus -> 84.016846
Neptune -> 164.79132
earthPeriod = 31557600