Add the haskell book
This commit is contained in:
8
Haskell-book/06/.gitignore
vendored
Normal file
8
Haskell-book/06/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/bower_components/
|
||||
/node_modules/
|
||||
/.pulp-cache/
|
||||
/output/
|
||||
/generated-docs/
|
||||
/.psc*
|
||||
/.purs*
|
||||
/.psa*
|
||||
16
Haskell-book/06/bower.json
Normal file
16
Haskell-book/06/bower.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "06",
|
||||
"ignore": [
|
||||
"**/.*",
|
||||
"node_modules",
|
||||
"bower_components",
|
||||
"output"
|
||||
],
|
||||
"dependencies": {
|
||||
"purescript-prelude": "^3.1.0",
|
||||
"purescript-console": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"purescript-psci-support": "^3.0.0"
|
||||
}
|
||||
}
|
||||
63
Haskell-book/06/src/EqInstances.purs
Normal file
63
Haskell-book/06/src/EqInstances.purs
Normal file
@@ -0,0 +1,63 @@
|
||||
module EqInstances where
|
||||
-- Exercise: Eq Instances
|
||||
-- p. 178
|
||||
|
||||
import Prelude
|
||||
|
||||
-- Ex. 1
|
||||
data TisAnInteger =
|
||||
TisAn Int
|
||||
|
||||
instance eqTisAn :: Eq TisAnInteger where
|
||||
eq x y = x == y
|
||||
|
||||
-- Ex. 2
|
||||
data TwoIntegers =
|
||||
Two Int Int
|
||||
|
||||
instance ewTwoIntegers :: Eq TwoIntegers where
|
||||
eq (Two x y) (Two x' y') = x == x' && y == y'
|
||||
|
||||
-- Ex. 3
|
||||
data StringOrInt =
|
||||
TisAnInt Int
|
||||
| TisAString String
|
||||
|
||||
instance eqStringOrInt :: Eq StringOrInt where
|
||||
eq (TisAnInt x) (TisAnInt y) = x == y
|
||||
eq (TisAString x) (TisAString y) = x == y
|
||||
eq _ _ = false
|
||||
|
||||
-- Ex. 4
|
||||
data Pair a =
|
||||
Pair a a
|
||||
|
||||
instance eqPair :: Eq a => Eq (Pair a) where
|
||||
eq (Pair a b) (Pair a' b') = a == a' && b == b'
|
||||
|
||||
-- Ex. 5
|
||||
data Tuple a b =
|
||||
Tuple a b
|
||||
|
||||
instance eqTuple :: (Eq a, Eq b) => Eq (Tuple a b) where
|
||||
eq (Tuple a b) (Tuple a' b') = a == a' && b == b'
|
||||
|
||||
-- Ex. 6
|
||||
data Which a =
|
||||
ThisOne a
|
||||
| ThatOne a
|
||||
|
||||
instance eqWhich :: Eq a => Eq (Which a) where
|
||||
eq (ThisOne x) (ThisOne y) = x == y
|
||||
eq (ThatOne x) (ThatOne y) = x == y
|
||||
eq _ _ = false
|
||||
|
||||
-- Ex. 7
|
||||
data EitherOr a b =
|
||||
Hello a
|
||||
| Goodbye b
|
||||
|
||||
instance eqEitherOr :: (Eq a, Eq b) => Eq (EitherOr a b) where
|
||||
eq (Hello _) (Goodbye _) = false
|
||||
eq (Goodbye _) (Hello _) = false
|
||||
eq _ _ = true
|
||||
9
Haskell-book/06/src/Ex.purs
Normal file
9
Haskell-book/06/src/Ex.purs
Normal file
@@ -0,0 +1,9 @@
|
||||
module Ex where
|
||||
|
||||
import Prelude
|
||||
|
||||
--
|
||||
-- Type-Kwon-Do Two: Electric Typealoo
|
||||
--
|
||||
chk :: forall a b. Eq b => (a -> b) -> a -> b -> Boolean
|
||||
chk f a b = (f a) == b
|
||||
30
Haskell-book/06/src/Main.purs
Normal file
30
Haskell-book/06/src/Main.purs
Normal file
@@ -0,0 +1,30 @@
|
||||
module Main where
|
||||
|
||||
import Prelude
|
||||
import Control.Monad.Eff (Eff)
|
||||
import Control.Monad.Eff.Console (CONSOLE, log)
|
||||
|
||||
data DayOfWeek =
|
||||
Mon | Tue | Weds | Thu | Fri | Sat | Sun
|
||||
|
||||
data Date =
|
||||
Date DayOfWeek Int
|
||||
|
||||
instance eqDayOfWeek :: Eq DayOfWeek where
|
||||
eq Mon Mon = true
|
||||
eq Tue Tue = true
|
||||
eq Weds Weds = true
|
||||
eq Thu Thu = true
|
||||
eq Fri Fri = true
|
||||
eq Sat Sat = true
|
||||
eq Sun Sun = true
|
||||
eq _ _ = false
|
||||
|
||||
instance eqDate :: Eq Date where
|
||||
eq (Date weekday dayOfMonth)
|
||||
(Date weekday' dayOfMonth') =
|
||||
weekday == weekday' && dayOfMonth == dayOfMonth'
|
||||
|
||||
main :: forall e. Eff (console :: CONSOLE | e) Unit
|
||||
main = do
|
||||
log "Hello sailor!"
|
||||
9
Haskell-book/06/test/Main.purs
Normal file
9
Haskell-book/06/test/Main.purs
Normal file
@@ -0,0 +1,9 @@
|
||||
module Test.Main where
|
||||
|
||||
import Prelude
|
||||
import Control.Monad.Eff (Eff)
|
||||
import Control.Monad.Eff.Console (CONSOLE, log)
|
||||
|
||||
main :: forall e. Eff (console :: CONSOLE | e) Unit
|
||||
main = do
|
||||
log "You should add some tests."
|
||||
Reference in New Issue
Block a user