2025-12-14 22:41:17 +10:00
|
|
|
{nib, ...}: rec {
|
2025-12-14 11:59:29 +10:00
|
|
|
# Fault Monad
|
|
|
|
|
# Wrapper around an error (ie builtins.abort)
|
|
|
|
|
Fault = error: {
|
2025-12-14 17:46:44 +10:00
|
|
|
_error_ = error;
|
2025-12-14 11:59:29 +10:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
# Pattern Matching
|
2025-12-14 22:41:17 +10:00
|
|
|
isFault = T: builtins.attrNames T == ["_error_"];
|
2025-12-14 11:59:29 +10:00
|
|
|
|
|
|
|
|
# Unwrap (Monadic Return Operation)
|
2025-12-14 22:41:17 +10:00
|
|
|
unwrapFault = T:
|
|
|
|
|
assert isFault T || nib.panic.badType "Fault" T;
|
|
|
|
|
T._error_;
|
2025-12-14 11:59:29 +10:00
|
|
|
|
|
|
|
|
# Map (Monadic Bind Operation)
|
2025-12-14 22:41:17 +10:00
|
|
|
mapFault = f: T: Fault (f (unwrapFault T));
|
2025-12-14 11:59:29 +10:00
|
|
|
}
|