----------------------------------------------------------------------------- {-# LANGUAGE CPP #-} ----------------------------------------------------------------------------- -- | -- Module : Miso.Subscription.Util -- Copyright : (C) 2016-2025 David M. Johnson -- License : BSD3-style (see the file LICENSE) -- Maintainer : David M. Johnson <code@dmj.io> -- Stability : experimental -- Portability : non-portable ---------------------------------------------------------------------------- module Miso.Subscription.Util ( -- ** Utilities createSub ) where ---------------------------------------------------------------------------- import Control.Concurrent (threadDelay) import Control.Monad (forever) import Control.Exception (bracket) ----------------------------------------------------------------------------- import Miso.Effect ----------------------------------------------------------------------------- -- | Utility function to allow resource finalization on 'Sub'. createSub :: IO a -- ^ Acquire resource -> (a -> IO b) -- ^ Release resource -> Sub action createSub :: forall a b action. IO a -> (a -> IO b) -> Sub action createSub IO a acquire a -> IO b release = \Sink action _ -> IO a -> (a -> IO b) -> (a -> IO ()) -> IO () forall a b c. IO a -> (a -> IO b) -> (a -> IO c) -> IO c bracket IO a acquire a -> IO b release (\a _ -> IO () -> IO () forall (f :: * -> *) a b. Applicative f => f a -> f b forever (Int -> IO () threadDelay (Int -> Int secs Int 10000))) where secs :: Int -> Int secs :: Int -> Int secs = (Int -> Int -> Int forall a. Num a => a -> a -> a *Int 1000000) ----------------------------------------------------------------------------