haxl-0.2.0.0: Haxl/Core/Util.hs
-- Copyright (c) 2014-present, Facebook, Inc.
-- All rights reserved.
--
-- This source code is distributed under the terms of a BSD license,
-- found in the LICENSE file. An additional grant of patent rights can
-- be found in the PATENTS file.
{-# LANGUAGE CPP #-}
module Haxl.Core.Util
( compose
, textShow
, tryReadMVar
) where
#if __GLASGOW_HASKELL__ >= 708
import Control.Concurrent (tryReadMVar)
#else
import Control.Concurrent
#endif
import Data.Text (Text)
import qualified Data.Text as Text
-- | Composes a list of endofunctions.
compose :: [a -> a] -> a -> a
compose = foldr (.) id
#if __GLASGOW_HASKELL__ < 708
tryReadMVar :: MVar a -> IO (Maybe a)
tryReadMVar m = do
mb <- tryTakeMVar m
case mb of
Nothing -> return Nothing
Just a -> putMVar m a >> return (Just a)
#endif
textShow :: (Show a) => a -> Text
textShow = Text.pack . show