@@ -8748,7 +8748,7 @@ Build Systems
@file{elm.json} files. Using @code{elm-build-system} to build Elm
@dfn{applications} (which declare @code{@{ "type": "application" @}}) is
possible, but requires ad-hoc modifications to the build phases. For
-an example, see the definition of
+examples, see the definitions of the @code{elm-todomvc} example application and
the @code{elm} package itself (because the front-end for the
@samp{elm reactor} command is an Elm application).
@@ -8757,7 +8757,7 @@ Build Systems
@env{ELM_HOME}, but this does not yet work well with @code{elm-build-system}.
This limitation primarily affects Elm applications, because they specify
exact versions for their dependencies, whereas Elm packages specify supported
-version ranges. As a workaround, you can use
+version ranges. As a workaround, the example applications mentioned above use
the @code{patch-application-dependencies} procedure provided by
@code{(guix build elm-build-system)} to rewrite their @file{elm.json} files to
refer to the package versions actually present in the build environment.
@@ -487,3 +487,56 @@ (define-public elm-explorations-markdown
on the @code{marked} project, which focuses on speed.")
(license license:bsd-3)))
+(define-public elm-todomvc
+ (let ((commit "f236e7e56941c7705aba6e42cb020ff515fe3290")
+ (revision "1"))
+ (package
+ (name "elm-todomvc")
+ (version (git-version "1" revision commit))
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/evancz/elm-todomvc")
+ (commit commit)))
+ (sha256
+ (base32 "0g37bglzshkf79s4n7aq9ib44h5qn8ng7n72sh2xslgd20h05nfw"))
+ (file-name (git-file-name name version))))
+ (inputs (list elm-browser elm-core elm-html elm-json))
+ (build-system elm-build-system)
+ (arguments
+ (list
+ #:modules
+ `((srfi srfi-26)
+ ,@%elm-default-modules)
+ #:phases
+ #~(modify-phases %standard-phases
+ (delete 'stage)
+ (replace 'configure
+ patch-application-dependencies)
+ (replace 'build
+ (lambda* (#:key native-inputs inputs #:allow-other-keys)
+ (invoke (search-input-file (or native-inputs inputs)
+ "/bin/elm")
+ "make"
+ "src/Main.elm"
+ "--output=elm.js")))
+ (replace 'install
+ (lambda args
+ (let* ((out-dir #$output)
+ (dest-dir
+ (string-append out-dir
+ "/share/"
+ (strip-store-file-name out-dir))))
+ (for-each (cut install-file <> dest-dir)
+ `("elm.js"
+ "index.html"
+ "style.css"
+ "README.md")))))
+ (delete 'validate-compiled))))
+ (home-page "https://github.com/evancz/elm-todomvc")
+ (synopsis "TodoMVC in Elm")
+ (description "This is the official Elm implementation of
+@url{https://todomvc.com,TodoMVC}, a simple to-do--list application used to
+compare front-end web frameworks.")
+ (license license:bsd-3))))