# MIT License, Copyright (c) 2022 Marvin Borner :import std/Combinator . # empty option none T # encapsulates value in option some [[[0 2]]] # checks whether option is none none? [0 T [F]] :test (none? none) (T) :test (none? (some [[0]])) (F) # checks whether option is some some? [0 F [T]] :test (some? none) (F) :test (some? (some [[0]])) (T) # applies a function to the value in option map [[0 none [some (2 0)]]] :test (map [[1]] (some [[0]])) (some [[[0]]]) :test (map [[1]] none) (none) # applies a function to the value in option or returns first arg if none map-or [[[0 2 1]]] :test (map-or [[[2]]] [[1]] (some [[0]])) ([[[0]]]) :test (map-or [[[2]]] [[1]] none) ([[[2]]]) # extracts value from option or returns first argument if none unwrap-or [[0 1 I]] :test (unwrap-or F (some T)) (T) :test (unwrap-or F none) (F) # applies encapsulated value to given function apply [[1 none 0]] :test (apply none [some ([[1]] 0)]) (none) :test (apply (some [[0]]) [some ([[1]] 0)]) (some [[[0]]])