add Fault monad
This commit is contained in:
parent
a547a9bcaf
commit
b9f2acf7e7
3 changed files with 25 additions and 3 deletions
|
|
@ -1,12 +1,17 @@
|
||||||
{systems, ...}: let
|
{systems, ...}: let
|
||||||
|
mergeAttrsList = std.attrs.mergeAttrsList;
|
||||||
|
|
||||||
std = import ./std {};
|
std = import ./std {};
|
||||||
parse = import ./parse {
|
stdSubMods = {
|
||||||
attrs = std.attrs;
|
attrs = std.attrs;
|
||||||
|
fault = std.fault;
|
||||||
lists = std.lists;
|
lists = std.lists;
|
||||||
result = std.result;
|
result = std.result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
parse = import ./parse (mergeAttrsList [stdSubMods]);
|
||||||
in
|
in
|
||||||
std.attrs.mergeAttrsList [
|
mergeAttrsList [
|
||||||
# submodule content is accessible first by submodule name
|
# submodule content is accessible first by submodule name
|
||||||
# then by the name of the content (ie self.submodule.myFunc)
|
# then by the name of the content (ie self.submodule.myFunc)
|
||||||
{inherit parse;}
|
{inherit parse;}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
{...}: let
|
{...}: let
|
||||||
attrs = import ./attrs.nix {inherit lists;};
|
attrs = import ./attrs.nix {inherit lists;};
|
||||||
|
fault = import ./fault.nix {};
|
||||||
lists = import ./lists.nix {};
|
lists = import ./lists.nix {};
|
||||||
result = import ./result.nix {inherit lists;};
|
result = import ./result.nix {inherit lists;};
|
||||||
in
|
in
|
||||||
|
|
@ -8,5 +9,5 @@ in
|
||||||
|
|
||||||
# submodule content is accessible first by submodule name
|
# submodule content is accessible first by submodule name
|
||||||
# then by the name of the content (ie self.submodule.myFunc)
|
# then by the name of the content (ie self.submodule.myFunc)
|
||||||
{inherit attrs lists result;}
|
{inherit attrs fault lists result;}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
16
nib/std/fault.nix
Normal file
16
nib/std/fault.nix
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
{...}: rec {
|
||||||
|
# Fault Monad
|
||||||
|
# Wrapper around an error (ie builtins.abort)
|
||||||
|
Fault = error: {
|
||||||
|
error = error;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Pattern Matching
|
||||||
|
isFault = F: builtins.attrNames F == ["error"];
|
||||||
|
|
||||||
|
# Unwrap (Monadic Return Operation)
|
||||||
|
unwrap = F: F.error;
|
||||||
|
|
||||||
|
# Map (Monadic Bind Operation)
|
||||||
|
map = f: F: Fault (f (unwrap F));
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue