feat(third_party/bazel): Check in rules_haskell from Tweag

This commit is contained in:
Vincent Ambo 2019-07-04 11:18:12 +01:00
parent 2eb1dc26e4
commit f723b8b878
479 changed files with 51484 additions and 0 deletions

View file

@ -0,0 +1 @@
../.bazelrc

View file

@ -0,0 +1 @@
/bazel-*

View file

@ -0,0 +1,30 @@
# Tutorial code
Code for the [Bazel Haskell tutorial][bazel-haskell-tutorial].
[bazel-haskell-tutorial]: https://rules-haskell.readthedocs.io/en/latest/haskell.html
## Tutorial Workspace
Build everything in the tutorial workspace with;
```
$ bazel build @io_tweag_rules_haskell_tutorial//...
```
Show everything in the tutorial;
```
$ bazel query @io_tweag_rules_haskell_tutorial//...
@io_tweag_rules_haskell_tutorial//main:demorgan
@io_tweag_rules_haskell_tutorial//main:base
@io_tweag_rules_haskell_tutorial//lib:booleans
```
Build and run the tutorial example;
```
$ bazel build @io_tweag_rules_haskell_tutorial//lib:booleans
$ bazel build @io_tweag_rules_haskell_tutorial//main:demorgan
$ bazel run @io_tweag_rules_haskell_tutorial//main:demorgan
```

View file

@ -0,0 +1,49 @@
workspace(name = "io_tweag_rules_haskell_tutorial")
local_repository(
name = "io_tweag_rules_haskell",
path = "..",
)
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load("@io_tweag_rules_haskell//haskell:repositories.bzl", "haskell_repositories")
haskell_repositories()
rules_nixpkgs_version = "0.5.2"
http_archive(
name = "io_tweag_rules_nixpkgs",
sha256 = "5a384daa57b49abf9f0b672852f1a66a3c52aecf9d4d2ac64f6de0fd307690c8",
strip_prefix = "rules_nixpkgs-%s" % rules_nixpkgs_version,
urls = ["https://github.com/tweag/rules_nixpkgs/archive/v%s.tar.gz" % rules_nixpkgs_version],
)
load(
"@io_tweag_rules_nixpkgs//nixpkgs:nixpkgs.bzl",
"nixpkgs_cc_configure",
)
nixpkgs_cc_configure(
nix_file = "@io_tweag_rules_haskell//nixpkgs:cc-toolchain.nix",
repository = "@io_tweag_rules_haskell//nixpkgs:default.nix",
)
load(
"@io_tweag_rules_haskell//haskell:nixpkgs.bzl",
"haskell_register_ghc_nixpkgs",
)
haskell_register_ghc_nixpkgs(
repositories = {
"nixpkgs": "@io_tweag_rules_haskell//nixpkgs:default.nix",
},
version = "8.6.4",
)
load(
"@io_tweag_rules_haskell//haskell:haskell.bzl",
"haskell_register_ghc_bindists",
)
haskell_register_ghc_bindists(version = "8.6.4")

View file

@ -0,0 +1,10 @@
load(
"@io_tweag_rules_haskell//haskell:haskell.bzl",
"haskell_library",
)
haskell_library(
name = "booleans",
srcs = ["Bool.hs"],
visibility = ["//main:__pkg__"],
)

View file

@ -0,0 +1,19 @@
-- base is not available when no dependencies, so we have to define everything
-- from scratch.
{-# LANGUAGE NoImplicitPrelude #-}
module Bool where
data Bool = False | True
not :: Bool -> Bool
not False = True
not True = False
and :: Bool -> Bool -> Bool
and True True = True
and _ _ = False
or :: Bool -> Bool -> Bool
or False False = False
or _ _ = True

View file

@ -0,0 +1,17 @@
load(
"@io_tweag_rules_haskell//haskell:haskell.bzl",
"haskell_test",
"haskell_toolchain_library",
)
haskell_toolchain_library(name = "base")
haskell_test(
name = "demorgan",
srcs = ["Main.hs"],
compiler_flags = ["-threaded"],
deps = [
":base",
"//lib:booleans",
],
)

View file

@ -0,0 +1,16 @@
{-# LANGUAGE StandaloneDeriving #-}
module Main where
import Bool
import qualified Prelude
import Prelude ((++), (==), ($))
deriving instance Prelude.Eq Bool
bools :: [Bool]
bools = [False, True]
main =
Prelude.print $ Prelude.and $
[ not (x `and` y) == not x `or` not y | x <- bools, y <- bools]

View file

@ -0,0 +1,5 @@
load("@io_tweag_rules_haskell//haskell:haskell.bzl",
"haskell_binary",
"haskell_toolchain_library",
"haskell_library",
)