commit daf044b576feb8ee61bb6be18f28985f5e87f4f4
parent a1be864841356b237cbbee42c163384d69995555
Author: Erik Oosting <crazazy@tilde.cafe>
Date: Mon, 18 Dec 2023 14:29:00 +0100
add haskell version
Diffstat:
6 files changed, 152 insertions(+), 0 deletions(-)
diff --git a/haskell/CHANGELOG.md 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
@@ -0,0 +1,4 @@
+module Main where
+
+main :: IO ()
+main = putStrLn "Hello, Haskell!"
diff --git a/haskell/haskell.cabal 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
@@ -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
@@ -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
@@ -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