-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuser.hs
62 lines (46 loc) · 1.54 KB
/
user.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import Data.List (find)
import Data.Maybe (fromJust, fromMaybe)
-- MODEL
data User = User { userId :: Int, userName :: String, userEmail :: String }
data Param = Param { paramKey :: String, paramValue :: String }
users :: [User]
users = [
User 1 "sean" "[email protected]",
User 2 "alli" "[email protected]"]
alli :: Maybe User
alli = findUser users 2
nobody :: Maybe User
nobody = findUser users 999
params :: [Param]
params = [
Param "name" "sebastian",
Param "email" "[email protected]",
Param "_token" "48djs0gjk4208vs$"]
-- MAYBE
nextUserId :: [User] -> Int
nextUserId [] = 1
nextUserId users = maximum (map userId users) + 1
findUser :: [User] -> Int -> Maybe User
findUser users id = find (\user -> (userId user) == id) users
getParam :: String -> [Param] -> Maybe String
getParam key params = fmap paramValue maybeParam
where maybeParam = find (\param -> (paramKey param) == key) params
userFromParams :: [Param] -> Maybe User
userFromParams params = User (nextUserId users)
<$> getParam "name" params
<*> getParam "email" params
findUserName :: Int -> Maybe String
findUserName id = do
user <- findUser users id
Just (userName user)
-- VIEW
showUserId :: Maybe User -> String
showUserId Nothing = ""
showUserId user = show (fromJust (fmap userId user))
showUserName :: Maybe User -> String
showUserName user = fromMaybe "" (fmap userName user)
showUser :: Maybe User -> String
showUser Nothing = ""
showUser user = "{ id: " ++ id ++ ", name: " ++ name ++ " }"
where id = showUserId user
name = showUserName user