Data.UndefinedOr
- Package
- purescript-undefined-or
- Repository
- d86leader/purescript-undefined-or
A lot of JS functions accept and return records where some fields may be
missing. For missing fields in argument records you can use Data.Options
module. For missing fields in return records you can either use Foreign
and write parsers, or this module and trust the foreign code.
A simple example of usage:
// Test.js
exports.typicalApi = function() {
if (Math.random() > 0.5) {
return {"numberData": 9431, "stringData": "atad"};
} else {
return {"numberData": 8752}
}
}
-- Test.purs
type ApiRet = {numberData :: Boolean, stringData :: UndefinedOr String}
foreign import typicalApi :: Effect ApiRet
...
result <- typicalApi
case fromUndefined result.stringData of
Just data -> Console.log $ "got a string: " <> data
Nothing -> Console.log "no string"
You should avoid using this library whenever possible, as it's a shortcut: it lifts the neccessity of data validation from you, the ffi-bindings writer, to the user of your api. Also 75% of the use cases can be covered by clever use of typeclasses.
You should especially Not use this over Maybe.
#UndefinedOr Source
newtype UndefinedOr aWrapper for foreign values which may be undefined.
Caution: it may misbehave if the wrapped value is null or undefined.
All instances are the same as Maybe's instances. The missing Bind, Monad
and other advanced ones are omitted on purpose. If you want to use them,
run fromUndefined and use Maybe's instances.
Instances
(Eq a) => Eq (UndefinedOr a)Functor UndefinedOrApply UndefinedOrApplicative UndefinedOrAlt UndefinedOrPlus UndefinedOr(Show a) => Show (UndefinedOr a)
#isUndefined Source
isUndefined :: forall a. UndefinedOr a -> BooleanCheck if the value is present
#fromUndefined Source
fromUndefined :: forall a. UndefinedOr a -> Maybe aConvert to Maybe, returning Nothing if the value is missing
#toUndefined Source
toUndefined :: forall a. a -> UndefinedOr aWrap a value. Useful for equality checks with a foreign value without having to unwrap it.
Is a synonym for pure. Use that or this function based on the style
preference or if the name will disambiguate intent.
#runUndefined Source
runUndefined :: forall b a. b -> (a -> b) -> UndefinedOr a -> bLike maybe but for undefined
- Modules
- Data.
UndefinedOr