Subject: bug#36665: closed (Re: [bug#36665] [PATCH] gnu: Add elm-compiler 0.19.0)

From: [email-masked] (GNU bug Tracking System)
Date: Sat, 17 Aug 2019 14:18:03 +0000

Your bug report

#36665: [PATCH] gnu: Add elm-compiler 0.19.0

which was filed against the guix-patches package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
36665: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=36665
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: [bug#36665] [PATCH] gnu: Add elm-compiler 0.19.0
From: Ludovic Courtès <[email-masked]>
To: Robert Vollmert <[email-masked]>
Cc: [email-masked]
Date: Sat, 17 Aug 2019 16:17:31 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Hello,

Robert Vollmert <[email-masked]> skribis:

> This adds the elm compiler, version 0.19.0. This provides the
> `elm` command, with the exception of the `elm reactor` subcommand.
>
> Named `elm-compiler`, to leave space for `elm` as the full elm
> including reactor.
>
> * gnu/packages/elm.scm: New module.
> (elm-compiler): New package.
> * gnu/packages/patches/elm-disable-reactor.patch: New patch.
> * gnu/packages/patches/elm-fix-map-key.patch: New patch.
> * gnu/packages/patches/elm-relax-glsl-bound.patch: New patch.
> * gnu/local.mk: Add new files.

Finally applied with the minor changes below, which address issues
reported by ‘guix lint’ and tweak the synopsis and description.

Note that ‘elm repl’ says that it wants ‘node’ in $PATH, but I think
that’s OK: people who need the REPL can add Node to their environment,
and otherwise they can do without Node, AIUI.

Thank you!

Ludo’.

diff --git a/gnu/local.mk b/gnu/local.mk
index 9ac43897d4..aab29beb0a 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -774,9 +774,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/einstein-build.patch			\
   %D%/packages/patches/elfutils-tests-ptrace.patch		\
   %D%/packages/patches/elixir-path-length.patch			\
-  %D%/packages/patches/elm-disable-reactor.patch		\
-  %D%/packages/patches/elm-fix-map-key.patch			\
-  %D%/packages/patches/elm-relax-glsl-bound.patch		\
+  %D%/packages/patches/elm-compiler-disable-reactor.patch	\
+  %D%/packages/patches/elm-compiler-fix-map-key.patch		\
+  %D%/packages/patches/elm-compiler-relax-glsl-bound.patch	\
   %D%/packages/patches/emacs-dired-toggle-sudo-emacs-26.patch   \
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
diff --git a/gnu/packages/elm.scm b/gnu/packages/elm.scm
index e4dea88585..c6a8a81a94 100644
--- a/gnu/packages/elm.scm
+++ b/gnu/packages/elm.scm
@@ -24,7 +24,7 @@
   #:use-module (gnu packages haskell-xyz)
   #:use-module (gnu packages haskell-web)
   #:use-module (guix build-system haskell)
-  #:use-module (guix download)
+  #:use-module (guix git-download)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix packages))
 
@@ -38,15 +38,17 @@
     (version "0.19.0")
     (source
      (origin
-       (method url-fetch)
-       (file-name "elm-0.19.0.tar.gz")
-       (uri "https://github.com/elm/compiler/archive/0.19.0.tar.gz")
+       (method git-fetch)
+       (file-name (git-file-name name version))
+       (uri (git-reference
+             (url "https://github.com/elm/compiler/")
+             (commit version)))
        (sha256
-        (base32 "0g4risrjrvngz3j4wf432j82gjcc8i1b7l5lwbb0fhr24hvz6ka9"))
+        (base32 "0s93z9vr0vp5w894ghc5s34nsq09sg1msf59zfiba87sid5vgjqy"))
        (patches
-        (search-patches "elm-disable-reactor.patch"
-                        "elm-relax-glsl-bound.patch"
-                        "elm-fix-map-key.patch"))))
+        (search-patches "elm-compiler-disable-reactor.patch"
+                        "elm-compiler-relax-glsl-bound.patch"
+                        "elm-compiler-fix-map-key.patch"))))
     (build-system haskell-build-system)
     (inputs
      `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
@@ -71,8 +73,9 @@
        ("ghc-vector" ,ghc-vector)
        ("ghc-zip-archive" ,ghc-zip-archive)))
     (home-page "https://elm-lang.org")
-    (synopsis "The `elm` command line interface, without `elm reactor`")
+    (synopsis "Programming language for Web applications")
     (description
-     "This includes commands like `elm make`, `elm repl`, and many others
-for helping make Elm developers happy and productive.")
+     "This package provides Elm, a statically-typed functional programming
+language for the browser.  It includes commands for developers such as like
+@command{elm make} and @command{elm repl}.")
     (license license:bsd-3)))
diff --git a/gnu/packages/patches/elm-disable-reactor.patch b/gnu/packages/patches/elm-compiler-disable-reactor.patch
similarity index 100%
rename from gnu/packages/patches/elm-disable-reactor.patch
rename to gnu/packages/patches/elm-compiler-disable-reactor.patch
diff --git a/gnu/packages/patches/elm-fix-map-key.patch b/gnu/packages/patches/elm-compiler-fix-map-key.patch
similarity index 100%
rename from gnu/packages/patches/elm-fix-map-key.patch
rename to gnu/packages/patches/elm-compiler-fix-map-key.patch
diff --git a/gnu/packages/patches/elm-relax-glsl-bound.patch b/gnu/packages/patches/elm-compiler-relax-glsl-bound.patch
similarity index 100%
rename from gnu/packages/patches/elm-relax-glsl-bound.patch
rename to gnu/packages/patches/elm-compiler-relax-glsl-bound.patch

Subject: [PATCH] gnu: Add elm-compiler 0.19.0
From: Robert Vollmert <[email-masked]>
To: [email-masked]
Cc: Robert Vollmert <[email-masked]>
Date: Mon, 15 Jul 2019 15:47:14 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

This adds the elm compiler, version 0.19.0. This provides the
`elm` command, with the exception of the `elm reactor` subcommand.

Named `elm-compiler`, to leave space for `elm` as the full elm
including reactor.

* gnu/packages/elm.scm: New module.
(elm-compiler): New package.
* gnu/packages/patches/elm-disable-reactor.patch: New patch.
* gnu/packages/patches/elm-fix-map-key.patch: New patch.
* gnu/packages/patches/elm-relax-glsl-bound.patch: New patch.
* gnu/local.mk: Add new files.
---

This depends on patch set 36663: Add elm compiler dependencies.

 gnu/local.mk                                  |  4 +
 gnu/packages/elm.scm                          | 78 +++++++++++++++++++
 .../patches/elm-disable-reactor.patch         | 71 +++++++++++++++++
 gnu/packages/patches/elm-fix-map-key.patch    | 38 +++++++++
 .../patches/elm-relax-glsl-bound.patch        | 19 +++++
 5 files changed, 210 insertions(+)
 create mode 100644 gnu/packages/elm.scm
 create mode 100644 gnu/packages/patches/elm-disable-reactor.patch
 create mode 100644 gnu/packages/patches/elm-fix-map-key.patch
 create mode 100644 gnu/packages/patches/elm-relax-glsl-bound.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index af76145225..4f131e8fac 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -161,6 +161,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/packages/electronics.scm			\
   %D%/packages/elf.scm				\
   %D%/packages/elixir.scm			\
+  %D%/packages/elm.scm				\
   %D%/packages/embedded.scm			\
   %D%/packages/emacs.scm			\
   %D%/packages/emacs-xyz.scm			\
@@ -768,6 +769,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/dvd+rw-tools-add-include.patch 		\
   %D%/packages/patches/elfutils-tests-ptrace.patch		\
   %D%/packages/patches/elixir-path-length.patch			\
+  %D%/packages/patches/elm-disable-reactor.patch		\
+  %D%/packages/patches/elm-fix-map-key.patch			\
+  %D%/packages/patches/elm-relax-glsl-bound.patch		\
   %D%/packages/patches/einstein-build.patch			\
   %D%/packages/patches/emacs-exec-path.patch			\
   %D%/packages/patches/emacs-fix-scheme-indent-function.patch	\
diff --git a/gnu/packages/elm.scm b/gnu/packages/elm.scm
new file mode 100644
index 0000000000..e4dea88585
--- /dev/null
+++ b/gnu/packages/elm.scm
@@ -0,0 +1,78 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2019 Robert Vollmert <[email-masked]>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu packages elm)
+  #:use-module (gnu packages)
+  #:use-module (gnu packages haskell)
+  #:use-module (gnu packages haskell-check)
+  #:use-module (gnu packages haskell-crypto)
+  #:use-module (gnu packages haskell-xyz)
+  #:use-module (gnu packages haskell-web)
+  #:use-module (guix build-system haskell)
+  #:use-module (guix download)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages))
+
+;; The full elm build calls out to itself via Template Haskell to
+;; compile the elm reactor web app. elm reactor isn't required to
+;; compile elm applications, so we take this part out of this
+;; bootstrap package.
+(define-public elm-compiler
+  (package
+    (name "elm-compiler")
+    (version "0.19.0")
+    (source
+     (origin
+       (method url-fetch)
+       (file-name "elm-0.19.0.tar.gz")
+       (uri "https://github.com/elm/compiler/archive/0.19.0.tar.gz")
+       (sha256
+        (base32 "0g4risrjrvngz3j4wf432j82gjcc8i1b7l5lwbb0fhr24hvz6ka9"))
+       (patches
+        (search-patches "elm-disable-reactor.patch"
+                        "elm-relax-glsl-bound.patch"
+                        "elm-fix-map-key.patch"))))
+    (build-system haskell-build-system)
+    (inputs
+     `(("ghc-ansi-terminal" ,ghc-ansi-terminal)
+       ("ghc-ansi-wl-pprint" ,ghc-ansi-wl-pprint)
+       ("ghc-edit-distance" ,ghc-edit-distance)
+       ("ghc-file-embed" ,ghc-file-embed)
+       ("ghc-http" ,ghc-http)
+       ("ghc-http-client" ,ghc-http-client)
+       ("ghc-http-client-tls" ,ghc-http-client-tls)
+       ("ghc-http-types" ,ghc-http-types)
+       ("ghc-language-glsl" ,ghc-language-glsl)
+       ("ghc-logict" ,ghc-logict)
+       ("ghc-network" ,ghc-network)
+       ("ghc-raw-strings-qq" ,ghc-raw-strings-qq)
+       ("ghc-scientific" ,ghc-scientific)
+       ("ghc-sha" ,ghc-sha)
+       ("ghc-snap-core" ,ghc-snap-core)
+       ("ghc-snap-server" ,ghc-snap-server)
+       ("ghc-unordered-containers"
+        ,ghc-unordered-containers)
+       ("ghc-utf8-string" ,ghc-utf8-string)
+       ("ghc-vector" ,ghc-vector)
+       ("ghc-zip-archive" ,ghc-zip-archive)))
+    (home-page "https://elm-lang.org")
+    (synopsis "The `elm` command line interface, without `elm reactor`")
+    (description
+     "This includes commands like `elm make`, `elm repl`, and many others
+for helping make Elm developers happy and productive.")
+    (license license:bsd-3)))
diff --git a/gnu/packages/patches/elm-disable-reactor.patch b/gnu/packages/patches/elm-disable-reactor.patch
new file mode 100644
index 0000000000..9871b55e8d
--- /dev/null
+++ b/gnu/packages/patches/elm-disable-reactor.patch
@@ -0,0 +1,71 @@
+commit 20d80e2323b565a36751c9455e535d8f73fa32f7
+Author: Robert Vollmert <[email-masked]>
+Date:   Fri Jun 14 16:05:47 2019 +0200
+
+    disable reactor
+
+diff --git a/elm.cabal b/elm.cabal
+index c75f9689..ece63c46 100644
+--- a/elm.cabal
++++ b/elm.cabal
+@@ -45,9 +45,6 @@ Executable elm
+         builder/src
+         ui/terminal/src
+ 
+-    other-extensions:
+-        TemplateHaskell
+-
+     Main-Is:
+         Main.hs
+ 
+@@ -56,8 +53,6 @@ Executable elm
+         Develop
+         Develop.Generate.Help
+         Develop.Generate.Index
+-        Develop.StaticFiles
+-        Develop.StaticFiles.Build
+         Diff
+         Init
+         Install
+diff --git a/ui/terminal/src/Develop.hs b/ui/terminal/src/Develop.hs
+index 4b2252e1..7ed7716e 100644
+--- a/ui/terminal/src/Develop.hs
++++ b/ui/terminal/src/Develop.hs
+@@ -23,7 +23,6 @@ import Snap.Util.FileServe
+ import qualified Elm.Project as Project
+ import qualified Develop.Generate.Help as Generate
+ import qualified Develop.Generate.Index as Index
+-import qualified Develop.StaticFiles as StaticFiles
+ import qualified Generate.Output as Output
+ import qualified Json.Encode as Encode
+ import qualified Reporting.Exit as Exit
+@@ -219,16 +218,7 @@ compileToHtmlBuilder mode file =
+ 
+ 
+ serveAssets :: Snap ()
+-serveAssets =
+-  do  file <- getSafePath
+-      case StaticFiles.lookup file of
+-        Nothing ->
+-          pass
+-
+-        Just (content, mimeType) ->
+-          do  modifyResponse (setContentType (mimeType <> ";charset=utf-8"))
+-              writeBS content
+-
++serveAssets = pass
+ 
+ 
+ -- MIME TYPES
+diff --git a/ui/terminal/src/Main.hs b/terminal/src/Main.hs
+index 7000f3ca..2c76965a 100644
+--- a/ui/terminal/src/Main.hs
++++ b/ui/terminal/src/Main.hs
+@@ -39,7 +39,6 @@ main =
+       complex intro outro
+         [ repl
+         , init
+-        , reactor
+         , make
+         , install
+         , bump
diff --git a/gnu/packages/patches/elm-fix-map-key.patch b/gnu/packages/patches/elm-fix-map-key.patch
new file mode 100644
index 0000000000..4f05ded530
--- /dev/null
+++ b/gnu/packages/patches/elm-fix-map-key.patch
@@ -0,0 +1,38 @@
+commit e3512d887df41a8162c3e361171c04beca08415b
+Author: Tom Stejskal <[email-masked]>
+Date:   Mon Nov 19 20:09:43 2018 +0100
+
+    Fix Map.!: given key is not an element in the map
+
+diff --git a/compiler/src/Elm/Compiler/Type/Extract.hs b/compiler/src/Elm/Compiler/Type/Extract.hs
+index 1aafe1d4..99763392 100644
+--- a/compiler/src/Elm/Compiler/Type/Extract.hs
++++ b/compiler/src/Elm/Compiler/Type/Extract.hs
+@@ -10,6 +10,7 @@ module Elm.Compiler.Type.Extract
+ 
+ 
+ import Data.Map ((!))
++import qualified Data.Map as Map
+ import qualified Data.Maybe as Maybe
+ import qualified Data.Set as Set
+ 
+@@ -134,11 +135,15 @@ extractUnion interfaces (Opt.Global home name) =
+     else
+       let
+         pname = toPublicName home name
+-        unions = I._unions (interfaces ! home)
++        maybeUnions = I._unions <$> Map.lookup home interfaces
+       in
+-      case I.toUnionInternals (unions ! name) of
+-        Can.Union vars ctors _ _ ->
+-          T.Union pname vars <$> traverse extractCtor ctors
++      case Map.lookup name =<< maybeUnions of
++        Just union ->
++          case I.toUnionInternals union of
++            Can.Union vars ctors _ _ ->
++              T.Union pname vars <$> traverse extractCtor ctors
++        Nothing ->
++          return $ T.Union pname [] []
+ 
+ 
+ extractCtor :: Can.Ctor -> Extractor (N.Name, [T.Type])
diff --git a/gnu/packages/patches/elm-relax-glsl-bound.patch b/gnu/packages/patches/elm-relax-glsl-bound.patch
new file mode 100644
index 0000000000..3f8be810c2
--- /dev/null
+++ b/gnu/packages/patches/elm-relax-glsl-bound.patch
@@ -0,0 +1,19 @@
+commit 4c649a5a270aba15cc6a3913c3ad51a293047f40
+Author: Rémi Lefèvre <[email-masked]>
+Date:   Mon Sep 3 19:18:54 2018 +0200
+
+    update language-glsl maximum version
+
+diff --git a/elm.cabal b/elm.cabal
+index 48aa84f0..464fe9d5 100644
+--- a/elm.cabal
++++ b/elm.cabal
+@@ -246,7 +246,7 @@ Executable elm
+         http-client >= 0.5 && < 0.6,
+         http-client-tls >= 0.3 && < 0.4,
+         http-types >= 0.9 && < 1.0,
+-        language-glsl >= 0.0.2 && < 0.3,
++        language-glsl >= 0.0.2 && < 0.4,
+         logict,
+         mtl >= 2.2.1 && < 3,
+         network >= 2.4 && < 2.7,
-- 
2.20.1 (Apple Git-117)