elm / compiler

Compiler for Elm, a functional language for reliable webapps.
https://elm-lang.org/
BSD 3-Clause "New" or "Revised" License
7.48k stars 658 forks source link

Suboptimal error for mising function arguments #2326

Open Golden-Phy opened 1 month ago

Golden-Phy commented 1 month ago

Quick Summary: The compiler brings up a type mismatch between function x -> type and type when trying to use the result of a partial function call. It does not give a hint that the user might want to apply the function to x by giving it as a parameter.

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 = Chain

type Chain 
  = Empty
  | Node Chain
init : Model
init = Node (Node Empty)

-- VIEW
view : Model -> Html ()
view model =
    div [] (render 
      model 
-- 2.      1
    )

render : Chain -> Int -> List (Html ())
render chain depth =
  case chain of
    Empty -> []
    Node subChain -> 
      (render 
        subChain 
-- 1.        (depth + 1)
      )
      ++ [div [] [text (String.fromInt depth)]]

Additional Details

Compiler output:

TYPE MISMATCH
Jump to problem
The (++) operator cannot append this type of value:

38|>      (render 

39|>        subChain 

40| -- 1.        (depth + 1)

41|       )

42|       ++ [div [] [text (String.fromInt depth)]]

This `render` call produces:

    Int -> List (Html ())

But the (++) operator is only for appending List and String values. Maybe put
this value in [] to make it a list?

Hint: I only know how to append strings and lists.
github-actions[bot] commented 1 month ago

Thanks for reporting this! To set expectations:

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