From daf044b576feb8ee61bb6be18f28985f5e87f4f4 Mon Sep 17 00:00:00 2001 From: Erik Oosting Date: Mon, 18 Dec 2023 14:29:00 +0100 Subject: add haskell version --- haskell/CHANGELOG.md | 5 +++ haskell/app/Main.hs | 4 +++ haskell/haskell.cabal | 76 +++++++++++++++++++++++++++++++++++++++++++ haskell/pkgs/default.nix | 7 ++++ haskell/pkgs/llvm-codegen.nix | 27 +++++++++++++++ haskell/shell.nix | 33 +++++++++++++++++++ 6 files changed, 152 insertions(+) create mode 100644 haskell/CHANGELOG.md create mode 100644 haskell/app/Main.hs create mode 100644 haskell/haskell.cabal create mode 100644 haskell/pkgs/default.nix create mode 100644 haskell/pkgs/llvm-codegen.nix create mode 100644 haskell/shell.nix (limited to 'haskell') 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 {}, 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 -- cgit 1.4.1-2-gfad0