Plutarch codegen: Recursive data type support
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Bắt đầu bằng việc đọc định nghĩa Plutarch pfix và lần theo các điểm vào hiện có của quá trình sinh mã cho các kiểu đệ quy và đệ quy tương hỗ. So sánh các ví dụ List, F và G trong issue với các hạng tử được sinh ra. Công việc được xem là hoàn tất khi một phương pháp sinh thống nhất cho các kiểu dữ liệu đệ quy được định nghĩa và minh họa, bao gồm cả việc xử lý phù hợp các constructor đa hình.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
One does not simply recurse in Plutarch.
My raw lambda calculus skills are not at the level where I'm just popping out fixpoint based terms so let's get back to the drawing board:
For a canonical recursive data type example and some mutually recursive ones:
sum List a = Cons a (List a) | Nil
sum F a = Rec (G a) | Nil
sum G a = Rec (F a) | Nil
What we do eventually is invoke some polymorphic class method on the constituents of each constructor (if it's a sum type, but also for products and records). This is where the problem happens right? How would we use pfix in this situation?
(let's imagine we have an annotation that tells us whether a type is infinite or not).
pfix :: Term s (((a :--> b) :--> (a :--> b)) :--> (a :--> b))
fib :: Term s (PInteger :--> PInteger)
fib = phoistAcyclic $
pfix #$ plam $ \self n ->
pif
(n #== 0)
0
$ pif
(n #== 1)
1
$ self # (n - 1) + self # (n - 2)
Main question is: How do we generate code in a uniform manner such that we can recurse properly?
- Ngôn ngữ chính
- Haskell
- Star
- 33
- Fork
- 1
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Chuẩn bị môi trường
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của mlabs-haskell/lambda-buffers
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 25/100
mlabs-haskell/lambda-buffers#296 ·
-
Create a more user friendly CLIĐang mở
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 20/100
mlabs-haskell/lambda-buffers#295 ·
-
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 20/100
mlabs-haskell/lambda-buffers#294 ·
-
Dykstra HFĐang mở
Độ khó 4/5 3-5 ngày Mức phù hợp với người mới 35/100
mlabs-haskell/lambda-buffers#293 ·
-
Nix-free pathĐang mởdevops
Độ khó 5/5 Hơn một tuần Mức phù hợp với người mới 25/100
mlabs-haskell/lambda-buffers#292 ·
Tất cả issue của mlabs-haskell/lambda-buffers
Issue tương tự
-
cabal update underdocumentedCó thể đã có người làm @KeuqS đã nhận hôm nay. Đang mởattention: pr-welcome documentation good first issue
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 67/100
haskell/cabal#12447 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
objectionary/phino#1858 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
status: needs triage type: enhancement
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 90/100
haskell/haskell-language-server#5128 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 83/100
NorfairKing/safe-coloured-text#13 · 1 bình luận ·