diff options
Diffstat (limited to 'stdlib/source/library/lux/type/refinement.lux')
-rw-r--r-- | stdlib/source/library/lux/type/refinement.lux | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/stdlib/source/library/lux/type/refinement.lux b/stdlib/source/library/lux/type/refinement.lux index 2de171779..8e4f23952 100644 --- a/stdlib/source/library/lux/type/refinement.lux +++ b/stdlib/source/library/lux/type/refinement.lux @@ -25,9 +25,9 @@ (-> (Predicate t) (Refiner t %)))) (function (_ value) (if (predicate value) - {#.Some (:abstraction [#value value + {.#Some (:abstraction [#value value #predicate predicate])} - #.None))) + {.#None}))) (template [<name> <output> <slot>] [(def: .public <name> @@ -44,45 +44,45 @@ (-> (Refined t %) (Maybe (Refined t %))))) (function (_ refined) (let [(^slots [#value #predicate]) (:representation refined) - value' (transform value)] - (if (predicate value') - {#.Some (:abstraction [#value value' - #predicate predicate])} - #.None)))) + value' (transform #value)] + (if (#predicate value') + {.#Some (:abstraction [..#value value' + ..#predicate #predicate])} + {.#None})))) ) (def: .public (only refiner values) (All (_ t %) (-> (Refiner t %) (List t) (List (Refined t %)))) (case values - #.End - #.End + {.#End} + {.#End} - {#.Item head tail} + {.#Item head tail} (case (refiner head) - {#.Some refined} - {#.Item refined (only refiner tail)} + {.#Some refined} + {.#Item refined (only refiner tail)} - #.None + {.#None} (only refiner tail)))) (def: .public (partition refiner values) (All (_ t %) (-> (Refiner t %) (List t) [(List (Refined t %)) (List t)])) (case values - #.End - [#.End #.End] + {.#End} + [{.#End} {.#End}] - {#.Item head tail} + {.#Item head tail} (let [[yes no] (partition refiner tail)] (case (refiner head) - {#.Some refined} - [{#.Item refined yes} + {.#Some refined} + [{.#Item refined yes} no] - #.None + {.#None} [yes - {#.Item head no}])))) + {.#Item head no}])))) (syntax: .public (type [refiner <code>.any]) (macro.with_identifiers [g!t g!%] |