diff --git a/chapter10/generics.hs b/chapter10/generics.hs index 3a84874..d289075 100644 --- a/chapter10/generics.hs +++ b/chapter10/generics.hs @@ -31,6 +31,18 @@ class GEq a where default geq :: (Generic a, GEq' (Rep a)) => a -> a -> Bool geq x y = geq' (from x) (from y) -instance GEq Char where geq = (==) -instance GEq Int where geq = (==) -instance GEq Float where geq = (==) +-- Base equalities +instance GEq Char where geq = (==) +instance GEq Int where geq = (==) +instance GEq Float where geq = (==) + +-- Equalities derived from structure of (:+:) and (:*:) +instance GEq a => GEq (Maybe a) +instance (GEq a, GEq b) => GEq (a,b) + +main :: IO () +main = do + print $ geq 2 (3 :: Int) + print $ geq 'a' 'b' + print $ geq (Just 'a') (Just 'a') + print $ geq ('a','b') ('a', 'b') diff --git a/chapter9/assign/README.md b/chapter9/assign/README.md new file mode 100644 index 0000000..d8f1130 --- /dev/null +++ b/chapter9/assign/README.md @@ -0,0 +1,6 @@ +Assign +------ + +```bash +$ stack exec assign input.test +``` diff --git a/chapter9/assign/happy.cabal b/chapter9/assign/assign.cabal similarity index 93% rename from chapter9/assign/happy.cabal rename to chapter9/assign/assign.cabal index ed65d8d..e70e190 100644 --- a/chapter9/assign/happy.cabal +++ b/chapter9/assign/assign.cabal @@ -6,7 +6,7 @@ cabal-version: >=1.10 executable assign build-depends: - base >= 4.6 && <4.7 + base >= 4.6 && <4.9 , containers >= 0.5 && <0.6 , mtl >= 2.2 default-language: Haskell2010 diff --git a/chapter9/assign/stack.yaml b/chapter9/assign/stack.yaml new file mode 100644 index 0000000..02c0265 --- /dev/null +++ b/chapter9/assign/stack.yaml @@ -0,0 +1,6 @@ +resolver: lts-3.16 +packages: +- '.' +extra-deps: [] +flags: {} +extra-package-dbs: [] diff --git a/chapter9/attoparsec/simple.ml b/chapter9/attoparsec/simple.ml new file mode 100644 index 0000000..7d02371 --- /dev/null +++ b/chapter9/attoparsec/simple.ml @@ -0,0 +1 @@ +(\x -> x)