packages feed

th-lock-0.0.4: test/Tests/Language/Haskell/TH/Lock/State.hs

module Tests.Language.Haskell.TH.Lock.State where

import Data.IORef
import Language.Haskell.TH
import Language.Haskell.TH.Syntax
import System.IO.Unsafe

state :: IORef String
state = unsafePerformIO (newIORef "")

set :: String -> Q [Dec]
set s = runIO (atomicWriteIORef state s) >> pure []

get :: Q Exp
get = lift =<< runIO (readIORef state)