Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Printed quotations show a struct tuple as `NewTuple`

Đang mở Phù hợp với người mới
#20,800 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 3 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
72/100
Loại issue
Lỗi
Độ rõ ràng
Khá rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
fsharp
Lĩnh vực
developer-experience

Hướng nghiên cứu

Bắt đầu bằng cách tìm mã của quotation printer và các bài kiểm thử trong kho lưu trữ F#; issue không nêu tên tệp hay bài kiểm thử nào. Tái hiện bằng hai quotation printfn "%A" được cung cấp và kiểm tra cách NewTuple được in bên cạnh Patterns.NewStructTuple. Hoàn tất khi struct tuple được in thành NewStructTuple (Value (1), Value ("a")), còn reference tuple vẫn được in thành NewTuple.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Bug Needs-Triage

Expr.ToString () and %A print the construction of a struct tuple exactly like the construction of a reference tuple, so a printed quotation does not show which tuple kind it builds.

Repro steps

printfn "%A" <@ struct (1, "a") @>
printfn "%A" <@ (1, "a") @>

Expected behavior

The struct tuple prints with the name of its active pattern and constructor (#8193): NewStructTuple (Value (1), Value ("a")).

Actual behavior

Both lines print NewTuple (Value (1), Value ("a")). Only Expr.Type tells them apart. Patterns.NewStructTuple matches the first quotation only, so the printer is the one place that hides the difference.

This matters for code that rewrites quotations: Expr.NewTuple always builds System.Tuple, so a rewrite that rebuilds a struct tuple with it changes the type of the tree, and a test that compares printed quotations cannot catch that.

Known workarounds

Compare Expr.Type (IsValueType) instead of the printed text.

Related information

  • FSharp.Core 10.1.0.0, .NET SDK 10.0.402 (dotnet fsi), Windows 11
Ngôn ngữ chính
F#
Star
4.3k
Fork
881
Merge trung bình
3 ngày 22 giờ
Pull request đã merge (30 ngày)
105

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. 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.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của dotnet/fsharp

Tất cả issue của dotnet/fsharp

Issue tương tự

Thêm issue về DevTools

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.