Skip to content
Snippets Groups Projects
Commit 8aec2181 authored by Jens Nolte's avatar Jens Nolte
Browse files

Implement unsafeObservableIO

parent 5cd6fdc7
No related branches found
No related tags found
No related merge requests found
......@@ -22,6 +22,7 @@ module Quasar.Observable (
mergeObservable,
joinObservable,
bindObservable,
unsafeObservableIO,
-- * Helper types
ObservableCallback,
......@@ -303,6 +304,21 @@ constObservable :: v -> Observable v
constObservable = Observable . ConstObservable
-- | Create an observable by simply running an IO action whenever a value is requested or a callback is registered.
--
-- There is no mechanism to send more than one update, so the resulting `Observable` will only be correct in specific
-- situations.
unsafeObservableIO :: forall v. IO v -> Observable v
unsafeObservableIO action = synchronousFnObservable observeFn action
where
observeFn :: (ObservableMessage v -> IO ()) -> IO Disposable
observeFn callback = do
callback ObservableLoading
value <- (ObservableUpdate <$> action) `catchAll` (pure . ObservableNotAvailable @v)
callback value
pure noDisposable
-- TODO implement
--cacheObservable :: IsObservable v o => o -> Observable v
--cacheObservable = undefined
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment