Add the haskell book
This commit is contained in:
52
Haskell-book/10/Db.hs
Normal file
52
Haskell-book/10/Db.hs
Normal file
@@ -0,0 +1,52 @@
|
||||
module Db where
|
||||
|
||||
import Data.Time
|
||||
|
||||
data DatabaseItem = DbString String
|
||||
| DbNumber Integer
|
||||
| DbDate UTCTime
|
||||
deriving (Eq, Ord, Show)
|
||||
|
||||
theDatabase :: [DatabaseItem]
|
||||
theDatabase =
|
||||
[ DbDate (UTCTime (fromGregorian 1911 5 1) (secondsToDiffTime 34123))
|
||||
, DbNumber 9001
|
||||
, DbString "Hello, world!"
|
||||
, DbDate (UTCTime (fromGregorian 1921 5 1) (secondsToDiffTime 34123))
|
||||
]
|
||||
|
||||
filterDbDate :: [DatabaseItem] -> [UTCTime]
|
||||
filterDbDate xs = foldr f1 [] (filter f2 xs)
|
||||
where f1 (DbDate d) acc = d : acc
|
||||
f2 (DbDate d) = True
|
||||
f2 _ = False
|
||||
|
||||
filterDbNumber :: [DatabaseItem] -> [Integer]
|
||||
filterDbNumber xs = foldr f1 [] (filter f2 xs)
|
||||
where f1 (DbNumber d) acc = d : acc
|
||||
f2 (DbNumber d) = True
|
||||
f2 _ = False
|
||||
|
||||
mostRecent :: [DatabaseItem] -> UTCTime
|
||||
mostRecent xs = maximum (filterDbDate xs)
|
||||
|
||||
sumDb :: [DatabaseItem] -> Integer
|
||||
sumDb xs = foldr (+) 0 (filterDbNumber xs)
|
||||
|
||||
avgDb :: [DatabaseItem] -> Double
|
||||
avgDb xs = (fromIntegral (sumDb xs)) / (fromIntegral (length (filterDbNumber xs)))
|
||||
|
||||
fibs :: [Integer]
|
||||
fibs = 1 : scanl (+) 1 fibs
|
||||
|
||||
fibs20 :: [Integer]
|
||||
fibs20 = take 20 (1 : scanl (+) 1 fibs)
|
||||
|
||||
fibs100 :: [Integer]
|
||||
fibs100 = takeWhile (\x -> x < 100) fibs
|
||||
|
||||
fibsN :: Int -> Integer
|
||||
fibsN x = fibs !! x
|
||||
|
||||
factorial :: [Integer]
|
||||
factorial = scanl (*) 1 [1..]
|
||||
Reference in New Issue
Block a user