Elm "cannot find module"

elm
KarelG picture KarelG · Dec 10, 2015 · Viewed 10.7k times · Source

I'm fairly new in Elm. It's interesting to see a functional language which allows you to develop front-end stuff. Now even if I am following the steps described here nicely, I still have problems with modules.

The code is

module Main where

import Html exposing ( Html )
import Signal

main : Signal Html.Html
main = Html.text "This should work."
       |> Signal.constant

I have used elm-reactor -a='localhost' to be able to view my output. But I am getting an error, that module 'HTML' cannot be found:

I cannot find find module 'Html'.

Module 'Main' is trying to import it.

Potential problems could be:
  * Misspelled the module name
  * Need to add a source directory or new dependency to elm-package.json

(note the double "find" hehe) The fix suggestion didn't help me. Or it could be that I'm not understanding the use of the .json file correctly.

elm-package.json:

{
    "version": "1.0.0",
    "summary": "testing elm",
    "license": "BSD3",
    "source-directories": [
        ".",
        "./bin/"
    ],
    "exposed-modules": [],
    "dependencies": {
        "elm-lang/core": "3.0.0 <= v < 4.0.0"
    },
    "elm-version": "0.16.0 <= v < 0.17.0"
}

Here is a screenshot of my file tree.

elm file tree

Maybe it behaves differently than how Haskell is threatening the modules.

How can I solve this - eh simple? - problem. Or is my elm-package.json just configured incorrectly?

Answer

Chad Gilbert picture Chad Gilbert · Dec 10, 2015

Update for Elm 0.17

In 0.17, the Html package has been moved to elm-lang/html. Run the following command from the terminal to install it:

elm package install elm-lang/html

You should also remove the evancz/elm-html package from elm-package.json because it no longer exists as of 0.17.

For more information about the upgrading from 0.16 to 0.17, please see the 0.17 announcement.

Original Answer for Elm 0.16

Your elm-package.json configuration is missing the evancz/elm-html package, which exposes Html. You can use elm's package manager to install dependencies rather than editing elm-package.json directly.

From the terminal, type the following:

elm package install evancz/elm-html

You will also be prompted to install a few other missing dependencies required by evancz/elm-html. Running this command will update your elm-package.json file as well as pull down the missing packages from the internet and install them in the standard elm-stuff/packages directory.

More info on the elm-package tool can be found here.

You can browse elm packages online at package.elm-lang.org. The sidebar has a Popular Packages section which contains the evancz/elm-html package mentioned here.