diff options
Diffstat (limited to 'Haskell-book/07/src')
| -rw-r--r-- | Haskell-book/07/src/ArtfulDodgy.purs | 13 | ||||
| -rw-r--r-- | Haskell-book/07/src/CasePractice.purs | 24 | ||||
| -rw-r--r-- | Haskell-book/07/src/Ex.purs | 70 | ||||
| -rw-r--r-- | Haskell-book/07/src/GrabBag.purs | 14 | ||||
| -rw-r--r-- | Haskell-book/07/src/Main.purs | 9 | ||||
| -rw-r--r-- | Haskell-book/07/src/VarietyPack.purs | 9 |
6 files changed, 139 insertions, 0 deletions
diff --git a/Haskell-book/07/src/ArtfulDodgy.purs b/Haskell-book/07/src/ArtfulDodgy.purs new file mode 100644 index 0000000..5206c8d --- /dev/null +++ b/Haskell-book/07/src/ArtfulDodgy.purs @@ -0,0 +1,13 @@ +module ArtfulDodgy where + +import Prelude + +-- Exercise 1 +dodgy :: Int -> Int -> Int +dodgy x y = x + y * 10 + +oneIsOne :: Int -> Int +oneIsOne = dodgy 1 + +oneIsTwo :: Int -> Int +oneIsTwo = (flip dodgy) 2 diff --git a/Haskell-book/07/src/CasePractice.purs b/Haskell-book/07/src/CasePractice.purs new file mode 100644 index 0000000..8f8cbab --- /dev/null +++ b/Haskell-book/07/src/CasePractice.purs @@ -0,0 +1,24 @@ +module CasePractice where + +import Data.Int (even) +import Prelude + +-- Exercise 1 +functionC :: forall a. Ord a => a -> a -> a +functionC x y = case (x > y) of + true -> x + false -> y + +-- Exercise 2 +isEvenAdd2 :: Int -> Int +isEvenAdd2 n = case even n of + true -> n + 2 + false -> n + +-- Exercise 3 +nums :: Int -> Int +nums x = + case compare x 0 of + LT -> -1 + GT -> 1 + EQ -> 0 diff --git a/Haskell-book/07/src/Ex.purs b/Haskell-book/07/src/Ex.purs new file mode 100644 index 0000000..340917e --- /dev/null +++ b/Haskell-book/07/src/Ex.purs @@ -0,0 +1,70 @@ +module Ex where + +import Data.Int (fromString) +import Data.Maybe (Maybe(..)) +import Data.Tuple (Tuple(..)) +import Prelude +import Unsafe.Coerce (unsafeCoerce) + +-- +-- Multiple choice +-- +-- Exercise 2 +f :: Char -> String +f = unsafeCoerce unit + +g :: String -> Array String +g = unsafeCoerce unit + +e :: Char -> Array String +e = g <<< f + +-- Exercise 5 +f' :: forall a. a -> a +f' x = x + +g' :: Boolean +g' = f' true + +-- +-- Let's write code +-- + +-- Exercise 1 +tensDigit :: Int -> Int +tensDigit x = d + where xLast = x `div` 10 + d = xLast `mod` 10 + +-- Exercise 2 +hunsD :: Int -> Int +hunsD x = d + where xLast = x `div` 100 + d = xLast `mod` 10 + +foldBool :: forall a. a -> a -> Boolean -> a +foldBool x y z = case z of + false -> x + true -> y + +findBool2 :: forall a. a -> a -> Boolean -> a +findBool2 x y z + | z = y + | otherwise = x + +foldBool3 :: forall a. a -> a -> Boolean -> a +foldBool3 x _ false = x +foldBool3 _ y true = y + +-- Exercise 3 +g'' :: forall a b c. (a -> b) -> Tuple a c -> Tuple b c +g'' f'' (Tuple a c) = Tuple (f'' a) c + +-- Exercise 5 +-- id :: a -> a +-- id = x = x + +roundTrip :: Int -> Int +roundTrip = fromMaybe <<< fromString <<< show + where fromMaybe (Just n) = n + fromMaybe Nothing = unsafeCoerce unit diff --git a/Haskell-book/07/src/GrabBag.purs b/Haskell-book/07/src/GrabBag.purs new file mode 100644 index 0000000..2967002 --- /dev/null +++ b/Haskell-book/07/src/GrabBag.purs @@ -0,0 +1,14 @@ +module GrabBags where + +import Data.Int (odd) +import Prelude + +-- 3 a) +addOneIfOdd :: Int -> Int +addOneIfOdd n = case odd n of + true -> f n + false -> n + where f = \k -> k + 1 + +addFive :: (Int -> (Int -> Int)) +addFive = \x -> \y -> (if x > y then y else x) + 5 diff --git a/Haskell-book/07/src/Main.purs b/Haskell-book/07/src/Main.purs new file mode 100644 index 0000000..836cae9 --- /dev/null +++ b/Haskell-book/07/src/Main.purs @@ -0,0 +1,9 @@ +module 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 (id "4") diff --git a/Haskell-book/07/src/VarietyPack.purs b/Haskell-book/07/src/VarietyPack.purs new file mode 100644 index 0000000..602ae8d --- /dev/null +++ b/Haskell-book/07/src/VarietyPack.purs @@ -0,0 +1,9 @@ +module VarietyPack where + +import Data.Tuple (Tuple(..)) + +f :: forall a b c d e g + . Tuple (Tuple a b) c + -> Tuple (Tuple d e) g + -> Tuple (Tuple a d) (Tuple c g) +f (Tuple (Tuple a b) c) (Tuple (Tuple d e) g) = Tuple (Tuple a d) (Tuple c g) |
