Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bad function signature leads to 'EXPECTING DEFINITION' #2327

Open
Golden-Phy opened this issue May 26, 2024 · 1 comment
Open

Bad function signature leads to 'EXPECTING DEFINITION' #2327

Golden-Phy opened this issue May 26, 2024 · 1 comment

Comments

@Golden-Phy
Copy link

Quick Summary: Missing parenthesis of tuples in the type signature of a function, seemingly lead the parser to assume that something is between the signature and definition, instead of raising a syntax error or type mismatch.

SSCCE

module Main exposing (..)

import Browser
import Html exposing (Html, div, text)

-- MAIN
main =
  Browser.sandbox { init = init, update = update, view = view }

-- UPDATE
update : () -> Model -> Model
update _ model =
  model

-- MODEL
type alias Model = Int

init : Model
init = 3

-- VIEW
view : Model -> Html ()
view model =
    div [] [text (Tuple.first (factorial model))]
    
factorial : Int -> String, Int
factorial i=
  if i <= 1 then ("1", 1) else 
    let 
      val = i * (Tuple.second (factorial (i - 1)))
    in
      (String.fromInt val, val)
  • Elm: Playground on https://elm-lang.org/try as of 26/5/2024
  • Browser: Mozilla Firefox for Fedora 123.0 (64)
  • Operating System: Fedora 39

Additional Details

Compiler output:

EXPECTING DEFINITION
Jump to problem
I just saw the type annotation for `factorial` so I was expecting to see its
definition here:

26| factorial : Int -> String, Int

                             ^
Type annotations always appear directly above the relevant definition, without
anything else in between. (Not even doc comments!)

Here is a valid definition (with a type annotation) for reference:

    greet : String -> String
    greet name =
      "Hello "    name    "!"

The top line (called a "type annotation") is optional. You can leave it off if
you want. As you get more comfortable with Elm and as your project grows, it
becomes more and more valuable to add them though! They work great as
compiler-verified documentation, and they often improve error messages!
Copy link

Thanks for reporting this! To set expectations:

  • Issues are reviewed in batches, so it can take some time to get a response.
  • Ask questions in a community forum. You will get an answer quicker that way!
  • If you experience something similar, open a new issue. We like duplicates.

Finally, please be patient with the core team. They are trying their best with limited resources.

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

No branches or pull requests

1 participant