packages feed

tilia-0.0.1.0: corpora/vendored/other/cpp/same-guard-twice.hs

{-# LANGUAGE CPP #-}
{-# LANGUAGE RankNTypes #-}

module Terminal.Run (runFrame) where

import Control.Monad.ST (ST, runST)
import Terminal.Buffer (Buffer, freeze, shrink)

#if defined(ASSERTS)
import GHC.Stack (HasCallStack)
#endif

runFrame ::
#if defined(ASSERTS)
  (HasCallStack) =>
#endif
  (forall s. (Buffer s -> Int -> ST s Buffer) -> ST s Buffer) -> Buffer
runFrame act  =  runST (act (\buffer used -> shrink buffer used >> freeze buffer))