Advertisement
Guest User

Untitled

a guest
Feb 27th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.77 KB | None | 0 0
  1. {-# LANGUAGE MultiParamTypeClasses #-}
  2.  
  3. module DataLib where
  4.  
  5. class Record a where
  6. getId :: a -> Int
  7.  
  8. insert :: Record a => a -> [a] -> [a]
  9. insert r rs = r : rs
  10.  
  11. update :: Record a => a -> [a] -> [a]
  12. update r rs = map (\r' -> if getId r == getId r' then r else r') rs
  13.  
  14. delete :: Record a => Int -> [a] -> [a]
  15. delete i rs = filter (\r' -> getId r' /= i) rs
  16.  
  17.  
  18. data Person = Person { personId :: Int, name :: String }
  19. instance Record Person where
  20. getId = personId
  21.  
  22. data Book = Book { bookId :: Int, title :: String }
  23. instance Record Book where
  24. getId = bookId
  25.  
  26. data Database = Database { employees :: [Person], books :: [Book], customers :: [Person] }
  27.  
  28. class (Record r) => Table r t where
  29. getRecords :: t -> Database -> [r]
  30. setRecords :: t -> [r] -> Database -> Database
  31.  
  32. insertRecord :: (Table r t) => t -> r -> Database -> Database
  33. insertRecord t r db =
  34. let records = getRecords t db
  35. newRecords = insert r records
  36. in setRecords t newRecords db
  37.  
  38. updateRecord :: (Table r t) => t -> r -> Database -> Database
  39. updateRecord t r db =
  40. let records = getRecords t db
  41. newRecords = update r records
  42. in setRecords t newRecords db
  43.  
  44. deleteRecord :: (Table r t) => t -> Int -> Database -> Database
  45. deleteRecord t i db =
  46. let records = getRecords t db
  47. newRecords = delete i records
  48. in setRecords t newRecords db
  49.  
  50. data ET = EmployeeTable
  51. instance (Table Person) ET where
  52. getRecords t db = employees db
  53. setRecords t records db = Database records (books db) (customers db)
  54.  
  55. data BT = BookTable
  56. instance (Table Book) BT where
  57. getRecords t db = books db
  58. setRecords t records db = Database (employees db) records (customers db)
  59.  
  60. data CT = CustomerTable
  61. instance (Table Person) CT where
  62. getRecords t db = customers db
  63. setRecords t records db = Database (employees db) (books db) records
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement