brick 0.49 → 0.50
raw patch · 3 files changed
+26/−7 lines, 3 filesdep ~stmPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: stm
API changes (from Hackage documentation)
+ Brick.BChan: writeBChanNonBlocking :: BChan a -> a -> IO Bool
- Brick.BorderMap: eBottomL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.BorderMap: eBottomL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.BorderMap: eLeftL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.BorderMap: eLeftL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.BorderMap: eRightL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.BorderMap: eRightL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.BorderMap: eTopL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.BorderMap: eTopL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.Types: bordersL :: forall n_aGiM. Lens' (Result n_aGiM) (BorderMap DynBorder)
+ Brick.Types: bordersL :: forall n_aGnm. Lens' (Result n_aGnm) (BorderMap DynBorder)
- Brick.Types: cursorLocationL :: forall n_aEXn. Lens' (CursorLocation n_aEXn) Location
+ Brick.Types: cursorLocationL :: forall n_aF1X. Lens' (CursorLocation n_aF1X) Location
- Brick.Types: cursorLocationNameL :: forall n_aEXn n_aGVY. Lens (CursorLocation n_aEXn) (CursorLocation n_aGVY) (Maybe n_aEXn) (Maybe n_aGVY)
+ Brick.Types: cursorLocationNameL :: forall n_aF1X n_aH0y. Lens (CursorLocation n_aF1X) (CursorLocation n_aH0y) (Maybe n_aF1X) (Maybe n_aH0y)
- Brick.Types: cursorsL :: forall n_aGiM. Lens' (Result n_aGiM) [CursorLocation n_aGiM]
+ Brick.Types: cursorsL :: forall n_aGnm. Lens' (Result n_aGnm) [CursorLocation n_aGnm]
- Brick.Types: eBottomL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.Types: eBottomL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.Types: eLeftL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.Types: eLeftL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.Types: eRightL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.Types: eRightL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.Types: eTopL :: forall a_aj4I. Lens' (Edges a_aj4I) a_aj4I
+ Brick.Types: eTopL :: forall a_aj9i. Lens' (Edges a_aj9i) a_aj9i
- Brick.Types: extentsL :: forall n_aGiM. Lens' (Result n_aGiM) [Extent n_aGiM]
+ Brick.Types: extentsL :: forall n_aGnm. Lens' (Result n_aGnm) [Extent n_aGnm]
- Brick.Types: imageL :: forall n_aGiM. Lens' (Result n_aGiM) Image
+ Brick.Types: imageL :: forall n_aGnm. Lens' (Result n_aGnm) Image
- Brick.Types: visibilityRequestsL :: forall n_aGiM. Lens' (Result n_aGiM) [VisibilityRequest]
+ Brick.Types: visibilityRequestsL :: forall n_aGnm. Lens' (Result n_aGnm) [VisibilityRequest]
- Brick.Widgets.Dialog: dialogButtonsL :: forall a_a1gDk a_a1gE1. Lens (Dialog a_a1gDk) (Dialog a_a1gE1) [(String, a_a1gDk)] [(String, a_a1gE1)]
+ Brick.Widgets.Dialog: dialogButtonsL :: forall a_a1gHU a_a1gIB. Lens (Dialog a_a1gHU) (Dialog a_a1gIB) [(String, a_a1gHU)] [(String, a_a1gIB)]
- Brick.Widgets.Dialog: dialogSelectedIndexL :: forall a_a1gDk. Lens' (Dialog a_a1gDk) (Maybe Int)
+ Brick.Widgets.Dialog: dialogSelectedIndexL :: forall a_a1gHU. Lens' (Dialog a_a1gHU) (Maybe Int)
- Brick.Widgets.Dialog: dialogTitleL :: forall a_a1gDk. Lens' (Dialog a_a1gDk) (Maybe String)
+ Brick.Widgets.Dialog: dialogTitleL :: forall a_a1gHU. Lens' (Dialog a_a1gHU) (Maybe String)
- Brick.Widgets.Dialog: dialogWidthL :: forall a_a1gDk. Lens' (Dialog a_a1gDk) Int
+ Brick.Widgets.Dialog: dialogWidthL :: forall a_a1gHU. Lens' (Dialog a_a1gHU) Int
- Brick.Widgets.Edit: editContentsL :: forall t_a1bxN n_a1bxO t_a1byx. Lens (Editor t_a1bxN n_a1bxO) (Editor t_a1byx n_a1bxO) (TextZipper t_a1bxN) (TextZipper t_a1byx)
+ Brick.Widgets.Edit: editContentsL :: forall t_a1bCn n_a1bCo t_a1bD7. Lens (Editor t_a1bCn n_a1bCo) (Editor t_a1bD7 n_a1bCo) (TextZipper t_a1bCn) (TextZipper t_a1bD7)
- Brick.Widgets.FileBrowser: fileBrowserEntryFilterL :: forall n_a1r6v. Lens' (FileBrowser n_a1r6v) (Maybe (FileInfo -> Bool))
+ Brick.Widgets.FileBrowser: fileBrowserEntryFilterL :: forall n_a1rb5. Lens' (FileBrowser n_a1rb5) (Maybe (FileInfo -> Bool))
- Brick.Widgets.FileBrowser: fileBrowserSelectableL :: forall n_a1r6v. Lens' (FileBrowser n_a1r6v) (FileInfo -> Bool)
+ Brick.Widgets.FileBrowser: fileBrowserSelectableL :: forall n_a1rb5. Lens' (FileBrowser n_a1rb5) (FileInfo -> Bool)
- Brick.Widgets.List: listElementsL :: forall n_a1lJR t_a1lJS e_a1lJT t_a1lYr e_a1lYs. Lens (GenericList n_a1lJR t_a1lJS e_a1lJT) (GenericList n_a1lJR t_a1lYr e_a1lYs) (t_a1lJS e_a1lJT) (t_a1lYr e_a1lYs)
+ Brick.Widgets.List: listElementsL :: forall n_a1lOr t_a1lOs e_a1lOt t_a1m31 e_a1m32. Lens (GenericList n_a1lOr t_a1lOs e_a1lOt) (GenericList n_a1lOr t_a1m31 e_a1m32) (t_a1lOs e_a1lOt) (t_a1m31 e_a1m32)
- Brick.Widgets.List: listItemHeightL :: forall n_a1lJR t_a1lJS e_a1lJT. Lens' (GenericList n_a1lJR t_a1lJS e_a1lJT) Int
+ Brick.Widgets.List: listItemHeightL :: forall n_a1lOr t_a1lOs e_a1lOt. Lens' (GenericList n_a1lOr t_a1lOs e_a1lOt) Int
- Brick.Widgets.List: listNameL :: forall n_a1lJR t_a1lJS e_a1lJT n_a1lYt. Lens (GenericList n_a1lJR t_a1lJS e_a1lJT) (GenericList n_a1lYt t_a1lJS e_a1lJT) n_a1lJR n_a1lYt
+ Brick.Widgets.List: listNameL :: forall n_a1lOr t_a1lOs e_a1lOt n_a1m33. Lens (GenericList n_a1lOr t_a1lOs e_a1lOt) (GenericList n_a1m33 t_a1lOs e_a1lOt) n_a1lOr n_a1m33
- Brick.Widgets.List: listSelectedL :: forall n_a1lJR t_a1lJS e_a1lJT. Lens' (GenericList n_a1lJR t_a1lJS e_a1lJT) (Maybe Int)
+ Brick.Widgets.List: listSelectedL :: forall n_a1lOr t_a1lOs e_a1lOt. Lens' (GenericList n_a1lOr t_a1lOs e_a1lOt) (Maybe Int)
Files
- CHANGELOG.md +8/−0
- brick.cabal +2/−2
- src/Brick/BChan.hs +16/−5
CHANGELOG.md view
@@ -2,6 +2,14 @@ Brick changelog --------------- +0.50+----++API changes:+ * Added `writeBChanNonBlocking`, which does a non-blocking write to a+ `BChan` and returns whether the write succeeded. This required+ raising the STM lower bound to 2.4.3.+ 0.49 ----
brick.cabal view
@@ -1,5 +1,5 @@ name: brick-version: 0.49+version: 0.50 synopsis: A declarative terminal user interface library description: Write terminal applications painlessly with 'brick'! You write an@@ -101,7 +101,7 @@ config-ini, vector, contravariant,- stm >= 2.4,+ stm >= 2.4.3, text, text-zipper >= 0.7.1, template-haskell,
src/Brick/BChan.hs view
@@ -2,6 +2,7 @@ ( BChan , newBChan , writeBChan+ , writeBChanNonBlocking , readBChan , readBChan2 )@@ -17,21 +18,31 @@ -- | @BChan@ is an abstract type representing a bounded FIFO channel. data BChan a = BChan (TBQueue a) --- |Builds and returns a new instance of @BChan@.+-- | Builds and returns a new instance of @BChan@. newBChan :: Int -- ^ maximum number of elements the channel can hold -> IO (BChan a) newBChan size = atomically $ BChan <$> newTBQueue (fromIntegral size) --- |Writes a value to a @BChan@; blocks if the channel is full.+-- | Writes a value to a @BChan@; blocks if the channel is full. writeBChan :: BChan a -> a -> IO () writeBChan (BChan q) a = atomically $ writeTBQueue q a --- |Reads the next value from the @BChan@; blocks if necessary.+-- | Attempts to write a value to a @BChan@. If the channel has room,+-- the value is written and this returns 'True'. Otherwise this returns+-- 'False' and returns immediately.+writeBChanNonBlocking :: BChan a -> a -> IO Bool+writeBChanNonBlocking (BChan q) a = atomically $ do+ f <- isFullTBQueue q+ if f+ then return False+ else writeTBQueue q a >> return True++-- | Reads the next value from the @BChan@; blocks if necessary. readBChan :: BChan a -> IO a readBChan (BChan q) = atomically $ readTBQueue q --- |Reads the next value from either @BChan@, prioritizing the first @BChan@;--- blocks if necessary.+-- | Reads the next value from either @BChan@, prioritizing the first+-- @BChan@; blocks if necessary. readBChan2 :: BChan a -> BChan b -> IO (Either a b) readBChan2 (BChan q1) (BChan q2) = atomically $ (Left <$> readTBQueue q1) `orElse` (Right <$> readTBQueue q2)