Sử dụng thư viện Req để thực hiện HTTP Request trong Haskell

Giới thiệu về thư viện Req Req là một thư viện HTTP client cấp cao trong Haskell, nổi bật với tính an toàn về kiểu dữ liệu, khả năng mở rộng và dễ sử dụng. Thư viện này tích hợp tốt với hệ thống kiểu của Haskell và hỗ trợ xử lý các request HTTP một cách rõ ràng, mạnh mẽ. Cài đặt thư viện qua Cabal: cabal install req Sau khi cài đặt, bạn có th ...

Đăng vào ngày 29 tháng 6 lúc 13:21

Hiểu về Endo, Dual và Foldable trong Haskell

Monoid Endo newtype Endo a = Endo { unwrap :: a -> a } instance Semigroup (Endo a) where Endo f <> Endo g = Endo (f . g) instance Monoid (Endo a) where mempty = Endo id Kiểu Endo a bao bọc một hàm có cùng kiểu đầu vào và đầu ra (a → a). Phép kết hợp của Endo chính là phép hợp thành hàm. Vì hợp thành hàm luôn thỏa tính kết hợp và ...

Đăng vào ngày 24 tháng 6 lúc 08:01

Thực Hành Monad trong Haskell

Monad increase n = Just (n + 1) addOne n = [n + 1] main = do print $ Nothing >> (Just 0) -- Nothing print $ (Just 0) >> (Nothing :: Maybe Int) -- Nothing print $ (Just 0) >> Nothing >> (Just 1) -- Nothing print $ (Just 0) >> (Just 1) >> (Just 2) -- Jus ...

Đăng vào ngày 23 tháng 6 lúc 13:15

Tạo và Sử Dụng Lens và Isos trong Haskell

Thiết kế Lens và Isos tùy chỉnh -- Một số ví dụ trong chương này yêu cầu các tiện ích mở rộng GHC: -- TemplateHaskell cần cho makeLenses; RankNTypes cần cho -- một số chữ ký kiểu sau này. {-# LANGUAGE TemplateHaskell, RankNTypes #-} import Control.Lens import Control.Monad.State data ViTri = ViTri { _toaDoX :: Double , _toaDoY :: Dou ...

Đăng vào ngày 19 tháng 6 lúc 16:52

MonadState, State và StateT trong Haskell

Lớp kiểu MonadState class Monad m => MonadState s m | m -> s where layTrangThai :: m s layTrangThai = trangThai (\s -> (s, s)) datTrangThai :: s -> m () datTrangThai s = trangThai (\_ -> ((), s)) trangThai :: (s -> (a, s)) -> m a trangThai f = do s <- layTrangThai let ~(a, s') = f s ...

Đăng vào ngày 17 tháng 6 lúc 01:41

Giải Mã Cơ Chế Hàm Fix Và Kỹ Thuật Loại Bỏ Đệ Quy Trong Haskell

Hàm Fix và Định Nghĩa Không Rời Khỏi Trong bộ thư viện chuẩn của Haskell, module Data.Function cung cấp hàm fix. Đây là công cụ cơ bản dùng để đóng gói các phép tính đệ quy mà không cần dùng đến từ khóa rec hay định nghĩa tên hàm trước. Về mặt toán học, nó hoạt động như một tổ hợp tử điểm bất động (fixed-point combinator). Định nghĩa của fix đư ...

Đăng vào ngày 14 tháng 6 lúc 21:42

Khám phá MonadWriter và WriterT trong Haskell

Lớp kiểu MonadWriter Trong Haskell, MonadWriter là một lớp kiểu (type class) cung cấp giao diện chung cho các Monad có khả năng ghi lại dữ liệu phụ (thường dùng cho logging hoặc audit trail). Lớp này yêu cầu kiểu dữ liệu ghi lại phải là một Monoid để có thể kết hợp các giá trị日志. class (Monoid w, Monad m) => MonadWriter w m | m -> w whe ...

Đăng vào ngày 11 tháng 6 lúc 23:25

Ghi chú học ngôn ngữ Haskell (30): MonadCont, Cont, và ContT

Lớp kiểu MonadCont class Monad m => MonadCont m where callCC :: ((a -> m b) -> m a) -> m a instance MonadCont (ContT r m) where callCC = ContT.callCC class Monad m => MonadCont m where MonadCont là một lớp kiểu, nó định nghĩa giao diện chung cho các Monad như ContT đóng gói hàm CPS (Continuation Passing Style). MonadCo ...

Đăng vào ngày 8 tháng 6 lúc 18:56

Tìm hiểu Thư viện Parsec trong Haskell - Phần 2

Các Combinator Cơ bản 1 Prelude Text.Parsec Text.Parsec.String> parseTest (count 3 (char 'a')) "aaa" "aaa" Prelude Text.Parsec Text.Parsec.String> parseTest (between (char '(') (char ')') anyChar) "(3)" '3' Prelude Text.Parsec Text.Parsec.String> parseTest (option ' ' (char 'a')) "b" ' ' Prelude ...

Đăng vào ngày 7 tháng 6 lúc 22:27

ghi chú học Haskell (98): Các hàm tạo thông minh

Hàm tạo thông minh https://wiki.haskell.org/Smart_constructors Hàm tạo thông minh là một kỹ thuật trong Haskell nhằm kiểm soát các tham số đầu vào khi khởi tạo một kiểu dữ liệu bằng cách ẩn đi các constructor mặc định và cung cấp các hàm đặc biệt để thực hiện việc xây dựng. Chúng có thể được phân loại thành hai nhóm: kiểm tra tại thời điểm chạy ...

Đăng vào ngày 5 tháng 6 lúc 23:44