Khóa học Haskell
Khóa học này được thiết kế để dạy cho sinh viên Haskell từ con số 0 đến mọi thứ cần thiết để làm việc với Marlowe và Plutus. Bản thân khóa học không chứa nội dung dành riêng cho Marlowe hoặc Plutus. Vì vậy, nếu bạn muốn sử dụng nó để học Haskell cho các mục đích khác, bạn có thể!mặt cười
FĐể được giải thích chi tiết hơn, hãy tiếp tục đọc hoặc xem video giới thiệu:
Tôi nên học bao nhiêu nếu tôi chỉ muốn sử dụng Marlowe/Plutus?
Trong phần outline bên dưới, có các điểm dừng rõ ràng (đối với cả Marlowe và Plutus) mà chúng tôi cho rằng bạn phải biết đủ về Haskell để sử dụng công nghệ một cách hiệu quả.
Làm thế nào để đọc / xem các bài học
Để xem qua các bài học tương tác, hãy chuyển đến dàn bài của bài học bạn đã chọn bên trong "What we'll cover" " và nhấp vào nút giống như bên dưới. Nếu trang tải với thông báo "500: Internal Server Error", chỉ cần làm mới trang đó và nó sẽ ổn. Ở trên cùng, bạn sẽ thấy bảng điều khiển hiển thị tiến trình chuẩn bị bài học tương tác của mình. Trong thời gian này, bạn có thể cuộn xuống và xem bài học được hiển thị không tương tác.
Và để xem video, hãy nhấp vào nút trông như thế này:
Làm bài tập về nhà
- Sao chép kho lưu trữ này.
- Tạo một tài khoản GitPod.
- CNhấp vào nút này để tạo môi trường phát triển từ xa:
- Chọn
Homework/HomeworkXX
hư mục có bài tập về nhà mà bạn muốn hoàn thành. 5.Thực hiện theo các hướng dẫn bên trong tệpHomework.hs
orMain.hs
. - Kiểm tra các giải pháp trong
solutions
branch!
Cấu trúc kho lưu trữ
Haskell-Course
| |
| |---- Homework
| |
| |---- Homework01 (Homework for lesson 01)
| |---- Homework02 (Homework for lesson 02)
| ...
|
|-------- lessons (Lessons in Jupyter notebook format. Access through Binder.)
|
|---- 1-Introduction-to-haskell
|---- 2-Functions-Data-Types-and-Signatures
Mọi thứ khác có thể được bỏ qua một cách an toàn
thảo luận với các sinh viên khác
Câu hỏi thường gặp
--FAQ
Các thay đổi được đề xuất cho lần lặp lại/phiên bản tiếp theo
--Changes
What we'll cover
Đây là một phác thảo dự kiến. Các thay đổi có thể (và sẽ) được thực hiện khi chúng tôi tiến hành khóa học và thu thập phản hồi từ học viên.
Nếu không có nút nào trên một bài học, điều đó có nghĩa là bài học đó chưa được xuất bản.
PHẦN BẮT ĐẦU 🐣⟶🐥
1. Giới thiệu và công cụ
- Giới thiệu khóa học và bài giảng
- What we’ll cover
- Repository structure
- Giới thiệu về Haskell
- Cách mở và sử dụng JupyterLab
- Ngôn ngữ lập trình chức năng thuần túy
- Cú pháp cơ bản
- Kiểu trong Haskell
- Tính lười (Laziness)
- GHC (and GHCi)
- GitPod
- Cách mở và sử dụng GitPod
- Ví dụ về cách hoàn thành bài tập về nhà..
2. Data types, Signatures, and Polymorphism
- Giới thiệu các kiểu thực tế
- Kiểu signature
- Function’s signatures
- Biến Haskell
- Tham số triong hàm
- Tên/ định nghĩa
- Hàm trung tố và tiền tố
- Các kiểu dữ liệu:
- Int, Integer
- Float, Double
- Rational
- Bool
- Char
- Lists
- Strings
- Tuples + Tuples VS Lists
- Polymorphic values and type variables
3. Điều kiện và Cấu trúc trợ giúp
- If-then-else
- Guards
let
expressionswhere
- Should I use
let
orwhere
? - Things to keep in mind
4. Pattern matching and Case
- What is pattern matching
- Pattern matching on
- Function implementations
- Lists
- Tuples
- Case
5. Cải tiến và kết hợp các hàm
- Các Hàm bậc cao
- Hàm
filter
- Hàm
any
- Hàm
- Hàm
Lambda
- Precedence and associativity
- Hàm
Curried
- Partial application
- Soạn thảo và ứng dụng hàm
- The
$
operator - The
.
operator
- The
- Kiểu Point-free
6. Đề Quy (Recursion)
- Tại sao đề quy (Recursion)?
- Tư duy đề quy
sum
vàproduct
- Các bước để tạo hàm đệ quy của riêng bạn
- Ví dụ về đệ quy
and
,length
,reverse
,drop
,take
,map
,filter
- Trích xuất mẫu
foldr
- Hàm
foldl
- Hàm
foldl'
- Khi nào thì sử dụng
foldr
,foldl
, vàfoldl'
7. Giới thiểu về lớp kiểu
- Sự tuyệt vời của lớp
- Các loại lớp là gì
- Các lớp kiểu phổ biến
Eq
,Ord
Num
,Integral
,Floating
Read
,Show
- Kiểu hợp lệ trung nhất
- Đa ràng buộc
8. Tạo kiểu không tham số
- Kiều (Type synonyms)
- How to define type synonyms
- Why use type synonyms
- Defining new types
- Creating new types with
data
- Using new types
- Value parameters
- Creating new types with
- Record syntax
9. Tạo các kiểu tham số hóa và đệ quy
- Kiểu tham số
- Kiểu tham số
type
- Kiểu tham số
data
- Kiểu tham số
- Kiểu dữ liệu đề quy
Tweet
- A
Sequence
ofNode
s - A
Tree
ofNode
s
- Các kiểu
- Từ khóa
newType
10. Tạo Type Classes and Instances
- Revisiting Type Classes
- The
Eq
type class- Defining the
Eq
type class - Defining an instance for the
Eq
type class - Improving our
Eq
type class (minimal complete definition) - Defining an instance for a parameterize type.
- Defining the
- The
Ord
type class- Exploring
Ord
type class (Subclassing)
- Exploring
- Deriving
- Complete example
11. Basic IO
- We need side effects
- What is IO
- main + putStrLn + composing other functions
>>
>>=
- do notation
do
<-
let
- Some examples
- Read/Write to console
- Read/Write to file
12. Pragmas, Modules, and Cabal
- Prelude
- pragmas/extensions
- Overview of base modules
- Importing base modules
- A few modules
- Data.Char
- Data.Tuple
- Data.Array
- Creating our own modules
- Cabal
- What is it and why we use it
- Cabal file
- Using external libraries with Cabal
13. Bits and Bytes
- Grouping bits and bytes
- Haskell and bytes
- Lazy and strict byte strings
- Example
14. Handling Errors
- TODO
15. Learning on your own and Map
- Using GHCi to find out more
- Hoogle
- HaskellWiki
- Walking through while teaching Map module
END OF THE BEGINNER SECTION 🐥
Congratulations! 🥳 You can call yourself a (beginner) Haskell programmer!
YOU'RE READY FOR THE MARLOWE PIONEER PROGRAM! 🥳🎉 (Keep going for Plutus.)
START OF THE INTERMEDIATE SECTION 🐥⟶🐓
16. Monoid
- Basic idea (definition without details)
- Intuitive examples
- Extracting the pattern
- Complete definition (with all the details/laws)
17. Functor
- Basic idea (definition without details)
- Intuitive examples
- Extracting the pattern
- Complete definition (with all the details/laws)
18. Applicative
- Basic idea (definition without details)
- Intuitive examples
- Extracting the pattern
- Complete definition (with all the details/laws)
19. Aeson
- Aeson
20. Monad
- Basic idea (definition without details)
- Intuitive examples
- Extracting the pattern
- Complete definition (with all the details/laws)
do
notation in general
21. Reader Monad
- Incentive/Motivation
- Binding strategy (see here)
- Definition
- Examples
22. Writer Monad
- Incentive/Motivation
- Binding strategy
- Definition
- Examples
23. State Monad
- Incentive/Motivation
- Binding strategy
- Definition
- Examples
24. Monadic functions / Operating with Monads
- liftM
- sequence and sequence_
- mapM and mapM_
- filterM
- foldM