1
Fork 0
purescript-halogen-select/examples/Internal/RemoteData.purs
2019-05-18 20:31:32 -07:00

44 lines
1.2 KiB
Text

-- | Copied over from
-- | https://github.com/krisajenkins/purescript-remotedata
-- |
-- | due to dependency conflicts
module Internal.RemoteData where
import Prelude
import Data.Either (Either(..))
import Data.Maybe (Maybe(..))
import Data.Foldable (class Foldable, foldrDefault, foldlDefault)
-- | A datatype representing fetched data.
data RemoteData e a
= NotAsked
| Loading
| Failure e
| Success a
derive instance eqRemoteData :: (Eq e, Eq a) => Eq (RemoteData e a)
derive instance functorRemoteData :: Functor (RemoteData e)
instance foldableRemoteData :: Foldable (RemoteData e) where
foldMap f (Success a) = f a
foldMap _ (Failure e) = mempty
foldMap _ NotAsked = mempty
foldMap _ Loading = mempty
foldr f = foldrDefault f
foldl f = foldlDefault f
-- | Convert a `RemoteData` to a `Maybe`.
toMaybe :: forall e a. RemoteData e a -> Maybe a
toMaybe (Success value) = Just value
toMaybe _ = Nothing
-- | Convert a `Maybe` to `RemoteData`.
fromMaybe :: forall e a. Maybe a -> RemoteData e a
fromMaybe Nothing = NotAsked
fromMaybe (Just value) = Success value
-- | Convert an `Either` to `RemoteData`
fromEither :: forall e a. Either e a -> RemoteData e a
fromEither (Left err) = Failure err
fromEither (Right value) = Success value