add ideas on Generic type

This commit is contained in:
Emile Clark-Boman 2026-01-27 12:45:50 +10:00
parent aeee0a3fbd
commit 7795231e5a

View file

@ -1 +1,35 @@
- [ ] rename all ' suffixed unsafe functions to Unsafe suffixed functions
- [ ] implement isomorphisms (especially from primitives to NixTypes)
A Generic Type/Class could be implement to use like:
```nix
# NOTE: this example is COMPLETELY overkill, it's just an example
isAttrs x
|> as Maybe # type coercion via isomorphisms
|> match [
(Some (Generic Bool) |> case (t: throw "t is from Generic, see \"nix:Bool\"=${typeOf t}"))
(None |> case (_: throw "not attrs"))
]
isAttrs x
|> as Maybe # type coercion via isomorphisms
|> (match <| Pattern (Some (Generic Bool)) (t: throw "t is from Generic, see \"nix:Bool\"=${typeOf t}")
<| Pattern None (_: throw "not attrs"))
# Rust inspired pattern matching syntax:
# resultA = match [platform arch] [
# (Pattern ["darwin" Any] darwin_package)
# (Pattern ["openbsd" "x86_64"] openbsd_x86_64_package)
# (Pattern [(x: x == "linux") (y: y == "x86_64")] linux_x86_64_package)
# (Pattern (x: y: x == "linux" && y == "aarch64") linux_aarch64_package)
# (Pattern Any default_package)
# ];
# resultB = match [platform arch] [
# (["darwin" Any] |> case darwin_package)
# (["openbsd" "x86_64"] |> case openbsd_x86_64_package)
# ([(x: x == "linux") (y: y == "x86_64")] |> case linux_x86_64_package)
# ((x: y: x == "linux" && y == "aarch64") |> case linux_aarch64_package)
# (Any |> case default_package)
# ];
```