summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Oosting2023-12-18 14:29:00 +0100
committerErik Oosting2023-12-18 14:29:00 +0100
commitdaf044b576feb8ee61bb6be18f28985f5e87f4f4 (patch)
treeb9ec8f9443bcaa339384cecd86d273f530a56f1c
parenta1be864841356b237cbbee42c163384d69995555 (diff)
add haskell version
-rw-r--r--haskell/CHANGELOG.md5
-rw-r--r--haskell/app/Main.hs4
-rw-r--r--haskell/haskell.cabal76
-rw-r--r--haskell/pkgs/default.nix7
-rw-r--r--haskell/pkgs/llvm-codegen.nix27
-rw-r--r--haskell/shell.nix33
6 files changed, 152 insertions, 0 deletions
diff --git a/haskell/CHANGELOG.md b/haskell/CHANGELOG.md
new file mode 100644
index 0000000..500a0d0
--- /dev/null
+++ b/haskell/CHANGELOG.md
@@ -0,0 +1,5 @@
+# Revision history for haskell
+
+## 0.1.0.0 -- YYYY-mm-dd
+
+* First version. Released on an unsuspecting world.
diff --git a/haskell/app/Main.hs b/haskell/app/Main.hs
new file mode 100644
index 0000000..65ae4a0
--- /dev/null
+++ b/haskell/app/Main.hs
@@ -0,0 +1,4 @@
+module Main where
+
+main :: IO ()
+main = putStrLn "Hello, Haskell!"
diff --git a/haskell/haskell.cabal b/haskell/haskell.cabal
new file mode 100644
index 0000000..e6abb24
--- /dev/null
+++ b/haskell/haskell.cabal
@@ -0,0 +1,76 @@
+cabal-version:      3.0
+-- The cabal-version field refers to the version of the .cabal specification,
+-- and can be different from the cabal-install (the tool) version and the
+-- Cabal (the library) version you are using. As such, the Cabal (the library)
+-- version used must be equal or greater than the version stated in this field.
+-- Starting from the specification version 2.2, the cabal-version field must be
+-- the first thing in the cabal file.
+
+-- Initial package description 'haskell' generated by
+-- 'cabal init'. For further documentation, see:
+--   http://haskell.org/cabal/users-guide/
+--
+-- The name of the package.
+name:               haskell
+
+-- The package version.
+-- See the Haskell package versioning policy (PVP) for standards
+-- guiding when and how versions should be incremented.
+-- https://pvp.haskell.org
+-- PVP summary:     +-+------- breaking API changes
+--                  | | +----- non-breaking API additions
+--                  | | | +--- code changes with no API change
+version:            0.1.0.0
+
+-- A short (one-line) description of the package.
+-- synopsis:
+
+-- A longer description of the package.
+-- description:
+
+-- The license under which the package is released.
+license:            NONE
+
+-- The package author(s).
+-- author:
+
+-- An email address to which users can send suggestions, bug reports, and patches.
+-- maintainer:
+
+-- A copyright notice.
+-- copyright:
+build-type:         Simple
+
+-- Extra doc files to be distributed with the package, such as a CHANGELOG or a README.
+extra-doc-files:    CHANGELOG.md
+
+-- Extra source files to be distributed with the package, such as examples, or a tutorial module.
+-- extra-source-files:
+
+common warnings
+    ghc-options: -Wall
+
+executable haskell
+    -- Import common warning flags.
+    import:           warnings
+
+    -- .hs or .lhs file containing the Main module.
+    main-is:          Main.hs
+
+    -- Modules included in this executable, other than Main.
+    -- other-modules:
+
+    -- LANGUAGE extensions used by modules in this package.
+    -- other-extensions:
+
+    -- Other library packages from which modules are imported.
+    build-depends:    base ^>=4.17.2.1,
+                      llvm-codegen,
+                      bound,
+                      recursion-schemes
+
+    -- Directories containing source files.
+    hs-source-dirs:   app
+
+    -- Base language which the package is written in.
+    default-language: Haskell2010
diff --git a/haskell/pkgs/default.nix b/haskell/pkgs/default.nix
new file mode 100644
index 0000000..37b220b
--- /dev/null
+++ b/haskell/pkgs/default.nix
@@ -0,0 +1,7 @@
+{haskellPackages, llvmPackages}:
+haskellPackages.override {
+  overrides = self: super: {
+    llvm-config = llvmPackages.llvm;
+    llvm-codegen = self.callPackage ./llvm-codegen.nix {};
+  };
+}
diff --git a/haskell/pkgs/llvm-codegen.nix b/haskell/pkgs/llvm-codegen.nix
new file mode 100644
index 0000000..57a95c8
--- /dev/null
+++ b/haskell/pkgs/llvm-codegen.nix
@@ -0,0 +1,27 @@
+{ mkDerivation, base, bytestring, Cabal, containers, dlist
+, fetchgit, ghc-prim, hspec, hspec-hedgehog, lib, llvm-config
+, mmorph, mtl, neat-interpolation, text, text-builder-linear
+}:
+mkDerivation {
+  pname = "llvm-codegen";
+  version = "0.1.0.0";
+  src = fetchgit {
+    url = "https://github.com/luc-tielen/llvm-codegen";
+    sha256 = "0d9xj25anjznxjmpmjkgd4d8s463akvn3h61y8wq5mzab24jq2b1";
+    rev = "83b04cb576208ea74ddd62016e4fa03f0df138ac";
+    fetchSubmodules = true;
+  };
+  setupHaskellDepends = [ base Cabal containers ];
+  libraryHaskellDepends = [
+    base bytestring containers dlist ghc-prim mmorph mtl text
+    text-builder-linear
+  ];
+  libraryToolDepends = [ llvm-config ];
+  testHaskellDepends = [
+    base bytestring containers dlist ghc-prim hspec hspec-hedgehog
+    mmorph mtl neat-interpolation text text-builder-linear
+  ];
+  testToolDepends = [ llvm-config ];
+  homepage = "https://github.com/luc-tielen/llvm-codegen";
+  license = lib.licenses.bsd3;
+}
diff --git a/haskell/shell.nix b/haskell/shell.nix
new file mode 100644
index 0000000..78b2637
--- /dev/null
+++ b/haskell/shell.nix
@@ -0,0 +1,33 @@
+{ nixpkgs ? import <nixpkgs> {}, compiler ? "default", doBenchmark ? false }:
+
+let
+
+  inherit (nixpkgs) pkgs;
+
+  f = { mkDerivation, base, bound, lib, llvm-codegen
+      , recursion-schemes
+      }:
+        mkDerivation {
+          pname = "haskell";
+          version = "0.1.0.0";
+          src = ./.;
+          isLibrary = false;
+          isExecutable = true;
+          executableHaskellDepends = [
+            base bound llvm-codegen recursion-schemes
+          ];
+          license = "unknown";
+          mainProgram = "haskell";
+        };
+
+  haskellPackages = if compiler == "default"
+                    then pkgs.callPackage ./pkgs {}
+                    else pkgs.haskell.packages.${compiler};
+
+  variant = if doBenchmark then pkgs.haskell.lib.doBenchmark else pkgs.lib.id;
+
+  drv = variant (haskellPackages.callPackage f {});
+
+in
+
+if pkgs.lib.inNixShell then drv.env else drv