Procs
proc `==`*[T](m1: Maybe[T]; m2: Maybe[T]): bool
- Equality for maybe objects
proc nothing*[T](): Maybe[T]
- Construct a maybe instance in the invalid state.
proc just*[T](val: T): Maybe[T]
- Construct a maybe instance in the valid state.
proc `$`*[T](m: Maybe[T]): string
- Convert a maybe instance to a string.
proc fmap*[T, U](m: Maybe[U]; p: (U -> T)): Maybe[T] {.
procvar.}-
Used to map a function over a boxed value.
Equivalent to (Functor f) => fmap :: (a->b) -> f a -> f b in Haskell.
proc `>>=`*[T, U](m: Maybe[U]; p: (U -> Maybe[T])): Maybe[T]
-
Used for chaining monadic computations together.
Analagous to bind(>>=) in Haskell.
Macros
macro maybeCase*[T](m: Maybe[T]; body: untyped): untyped
-
A macro which provides a safe access pattern to the maybe type. This avoids the need to have a get function which throws an exception when its used improperly.
This makes the following conversion
- maybeCase m:
- just x:
- expr1 using x
- nothing:
- expr2 that does not use x(trying to refer to x will not compile)
converts to --->
- if m.isValid:
- eval expr using x where x is replaced with m.value
- else:
- eval expr2