diff options
Diffstat (limited to 'third_party/bazel/rules_haskell/tutorial')
10 files changed, 148 insertions, 0 deletions
diff --git a/third_party/bazel/rules_haskell/tutorial/.bazelrc b/third_party/bazel/rules_haskell/tutorial/.bazelrc new file mode 120000 index 000000000000..adb61980d232 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/.bazelrc @@ -0,0 +1 @@ +../.bazelrc \ No newline at end of file diff --git a/third_party/bazel/rules_haskell/tutorial/.gitignore b/third_party/bazel/rules_haskell/tutorial/.gitignore new file mode 100644 index 000000000000..a6ef824c1f83 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/.gitignore @@ -0,0 +1 @@ +/bazel-* diff --git a/third_party/bazel/rules_haskell/tutorial/README.md b/third_party/bazel/rules_haskell/tutorial/README.md new file mode 100644 index 000000000000..34a5bb27f4b2 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/README.md @@ -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 +``` diff --git a/third_party/bazel/rules_haskell/tutorial/WORKSPACE b/third_party/bazel/rules_haskell/tutorial/WORKSPACE new file mode 100644 index 000000000000..21d25c247207 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/WORKSPACE @@ -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") diff --git a/third_party/bazel/rules_haskell/tutorial/lib/BUILD.bazel b/third_party/bazel/rules_haskell/tutorial/lib/BUILD.bazel new file mode 100644 index 000000000000..1afb9822419c --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/lib/BUILD.bazel @@ -0,0 +1,10 @@ +load( + "@io_tweag_rules_haskell//haskell:haskell.bzl", + "haskell_library", +) + +haskell_library( + name = "booleans", + srcs = ["Bool.hs"], + visibility = ["//main:__pkg__"], +) diff --git a/third_party/bazel/rules_haskell/tutorial/lib/Bool.hs b/third_party/bazel/rules_haskell/tutorial/lib/Bool.hs new file mode 100644 index 000000000000..7390fcc0b838 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/lib/Bool.hs @@ -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 diff --git a/third_party/bazel/rules_haskell/tutorial/main/BUILD.bazel b/third_party/bazel/rules_haskell/tutorial/main/BUILD.bazel new file mode 100644 index 000000000000..e2e7d3f42218 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/main/BUILD.bazel @@ -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", + ], +) diff --git a/third_party/bazel/rules_haskell/tutorial/main/Main.hs b/third_party/bazel/rules_haskell/tutorial/main/Main.hs new file mode 100644 index 000000000000..325fd61d0a1e --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/main/Main.hs @@ -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] diff --git a/third_party/bazel/rules_haskell/tutorial/tools/build_rules/BUILD.bazel b/third_party/bazel/rules_haskell/tutorial/tools/build_rules/BUILD.bazel new file mode 100644 index 000000000000..e69de29bb2d1 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/tools/build_rules/BUILD.bazel diff --git a/third_party/bazel/rules_haskell/tutorial/tools/build_rules/prelude_bazel b/third_party/bazel/rules_haskell/tutorial/tools/build_rules/prelude_bazel new file mode 100644 index 000000000000..7d275159b5b3 --- /dev/null +++ b/third_party/bazel/rules_haskell/tutorial/tools/build_rules/prelude_bazel @@ -0,0 +1,5 @@ +load("@io_tweag_rules_haskell//haskell:haskell.bzl", + "haskell_binary", + "haskell_toolchain_library", + "haskell_library", +) |