Skip to content

ahaxu/monad_transformer_tut

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 

Repository files navigation

Monad transformer

Link youtube bài giảng liên quan

https://youtu.be/QO8J8vMy7Cc

Ví dụ đơn giản về monad transformer

Ở ví dụ này, chúng ta làm đơn giản một chuơng trình, yêu cầu nhập vào tên, tuổi, địa chỉ

getName
getAge
getAddress

Sau đó, combine lại thành 1 hàm getUserInfo.

Chuơng trình sẽ in ra lỗi, nếu 1 trong các buớc valiation bị lỗi (validation ở đây đơn giản so sánh chuỗi nhập vào trống hay ko).

Chúng ta sẽ hiện thực theo trình tự xôi thịt (chạy đựoc, quick and dirty), sau đó là các buớc refactor code, ở đây chúng ta dùng Monad transformer để refactor code.

Trình tự

getUserInfo :: IO (Maybe UserInfo)
getUserInfo = do
    name <- getName
    case name of
        Nothing -> return Nothing
        Just name' -> do
            age <- getAge
            case age of
                Nothing -> return Nothing
                Just age' -> do
                    address <- getAddress
                    case address of
                        Nothing -> return Nothing
                        Just address' -> return $ Just $ UserInfo name' age' address'
getUserInfo :: ExceptT Error IO UserInfo
getUserInfo = do
    name <- getName
    age <- getAge
    address <- getAddress
    return $ UserInfo name age address

Cách chạy

cd path_to/monad-transformer-tut
ghci

# phien ban xoi thit
:l monad_transformer_naive_way.hs

# phien ban cai tien 1
:l monad_transformer_improve_1.hs

# phien ban cai tien 2
:l monad_transformer_improve_2.hs

[EN] Monad transformer tutorial

Reference

Releases

No releases published

Packages

No packages published