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

Mixed type comprehension target narrows list elements to bitstrings

Đang mở
#15,950 2 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 1 ngày

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

Đánh giá

Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức phù hợp với người mới
55/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ệ
elixir
Lĩnh vực
compilers

Hướng nghiên cứu

Start with the for_into/5 implementation and the change introduced in commit 7427c0cf5, then reproduce the warning with the supplied mixed_into_repro.exs example. Trace how the mixed empty_list() and binary() target affects the inferred body type. Done means the example still returns {:found, "ok"} without the false-positive unreachable-clause warning, while invalid type narrowing remains reported.

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

Mô tả

Existing issue
  • I have searched existing issues and could not find a duplicate.
Elixir and Erlang/OTP versions

Erlang/OTP 28 [erts-16.4.0.1] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]

Elixir 1.21.0-dev (25fa668)

Operating system

any

Current behavior

When for comprehension into type contains both empty_list() and binary(), for_into/5 correctly returns both [:bitstring, :non_empty_list], but returns bitstring() as the expected type for the body

Repro:
save as mixed_into_repro.exs

    defmodule MixedIntoRepro do
      def run(flag) do
        target = if flag, do: [], else: ""
        value = if flag, do: :ok, else: "ok"
        result = for _ <- [1], into: target, do: value

        case result do
          [head | _] ->
            case head do
              :ok -> :found
              _ -> :other
            end

          text when is_binary(text) ->
            text
        end
      end
    end

    IO.inspect({MixedIntoRepro.run(true), MixedIntoRepro.run(false)})

execute

elixir mixed_into_repro.exs

Result:
code works but prints a false positive warning

{:found, "ok"}
    warning: the following clause will never match:

        :ok ->

    because it attempts to match on the result of:

        head

    which has type:

        binary()

    type warning found at:
    │
 10 │               :ok -> :found
    │               ~~~~~~~~~~~~~
    │
    └─ mixed_into_repro.exs:10: MixedIntoRepro.run/1

Inroduced in 7427c0cf5

Expected behavior

No warning and invalid type narrowing

Ngôn ngữ chính
Elixir
Star
26.7k
Fork
3.7k
Merge trung bình
8 giờ 7 phút
Pull request đã merge (30 ngày)
60

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

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 elixir-lang/elixir

Tất cả issue của elixir-lang/elixir

Issue tương tự

Thêm issue về Elixir

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.