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