diff options
Diffstat (limited to '')
-rw-r--r-- | stdlib/source/lux/data/tainted.lux | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/stdlib/source/lux/data/tainted.lux b/stdlib/source/lux/data/tainted.lux new file mode 100644 index 000000000..9060d1da5 --- /dev/null +++ b/stdlib/source/lux/data/tainted.lux @@ -0,0 +1,26 @@ +(;module: + lux + (lux (data [product]) + (type model))) + +(model: #export (Tainted a) + a + + (def: #export taint + (All [a] (-> a (Tainted a))) + (|>. @model)) + + (def: #export trust + (All [a] (-> (Tainted a) a)) + (|>. @repr))) + +(def: #export (validate pred tainted) + (All [a] (-> (-> a Bool) (Tainted a) (Maybe a))) + (let [value (trust tainted)] + (if (pred value) + (#;Some value) + #;None))) + +(def: #export (sanitize f tainted) + (All [a] (-> (-> a a) (Tainted a) a)) + (|> tainted trust f)) |