Skip to content

Fix Elm.Let.fn/fn2/fn3 missing type annotations in declarations#137

Merged
mdgriffith merged 2 commits into
mdgriffith:mainfrom
dillonkearns:fix/let-fn-annotation
Apr 21, 2026
Merged

Fix Elm.Let.fn/fn2/fn3 missing type annotations in declarations#137
mdgriffith merged 2 commits into
mdgriffith:mainfrom
dillonkearns:fix/let-fn-annotation

Conversation

@dillonkearns
Copy link
Copy Markdown
Contributor

When a let-bound function (from Elm.Let.fn, fn2, or fn3) was called from the body of the let expression, the resulting expression had no proper function type annotation. This caused the enclosing declaration to be generated without a type annotation at all.

Before:

useLetFn =   -- No annotation!
    let
        myFn x = x + 1
    in
    myFn 5

After:

useLetFn : Int
useLetFn =
    let
        myFn x = x + 1
    in
    myFn 5

dillonkearns and others added 2 commits April 10, 2026 11:03
When a let-bound function (from Elm.Let.fn, fn2, or fn3) was called
from the body of the let expression, the resulting expression had
no proper function type annotation. This caused the enclosing
declaration to be generated without a type annotation at all.

Root cause: the `return` function in each of fn/fn2/fn3 built the
call expression using `innerFnDetails` directly, which contains the
body's return type as the annotation — not a function type. When
Elm.apply then tried to type-check the call, it couldn't derive a
proper type, so the declaration got no annotation.

Fix: extract a `letFnAnnotation` helper that builds a proper function
type annotation `arg1 -> arg2 -> ... -> body` from the arg annotations
and the body's annotation. Use it from fn, fn2, and fn3.

Before:
  useLetFn =   -- No annotation!
      let
          myFn x = x + 1
      in
      myFn 5

After:
  useLetFn : Int
  useLetFn =
      let
          myFn x = x + 1
      in
      myFn 5

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@mdgriffith mdgriffith merged commit f963186 into mdgriffith:main Apr 21, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants