diff --git a/fn/option.go b/fn/option.go index 797f3a0ff..f1a6c858c 100644 --- a/fn/option.go +++ b/fn/option.go @@ -2,8 +2,8 @@ package fn import "testing" -// Option[A] represents a value which may or may not be there. This is very -// often preferable to nil-able pointers. +// Option represents a value which may or may not be there. This is very often +// preferable to nil-able pointers. type Option[A any] struct { isSome bool some A @@ -26,6 +26,17 @@ func None[A any]() Option[A] { return Option[A]{} } +// OptionFromPtr constructs an option from a pointer. +// +// OptionFromPtr : *A -> Option[A]. +func OptionFromPtr[A any](a *A) Option[A] { + if a == nil { + return None[A]() + } + + return Some[A](*a) +} + // ElimOption is the universal Option eliminator. It can be used to safely // handle all possible values inside the Option by supplying two continuations. //