reflection 0.3.2 → 0.3.3
raw patch · 2 files changed
+12/−11 lines, 2 files
Files
- Data/Reflection.hs +11/−10
- reflection.cabal +1/−1
Data/Reflection.hs view
@@ -1,9 +1,10 @@ {-# LANGUAGE RankNTypes, MultiParamTypeClasses, FunctionalDependencies, FlexibleInstances, TypeOperators #-}+{-# OPTIONS_GHC -fno-cse -fno-full-laziness -fno-float-in #-} ---------------------------------------------------------------------------- -- | -- Module : Data.Reflection--- Copyright : 2009 Edward Kmett, 2004 Oleg Kiselyov and Chung-chieh Shan+-- Copyright : 2009-2011 Edward Kmett, 2004 Oleg Kiselyov and Chung-chieh Shan -- License : BSD3 -- -- Maintainer : Edward Kmett <ekmett@gmail.com>@@ -159,24 +160,24 @@ instance ReifiesStorable s => Reifies (Stable s a) a where reflect = r where- r = unsafePerformIO $ do- pure <$> deRefStablePtr (pointer reflectStorable r)- -- pure <$> deRefStablePtr p <* freeStablePtr p- -- p = pointer reflectStorable r+ r = unsafePerformIO $ + pure <$> deRefStablePtr p <* freeStablePtr p+ p = pointer reflectStorable r pointer :: Tagged (s' p) p -> Tagged (Stable s' a') a' -> p pointer (Tagged a) _ = a {-# NOINLINE reflect #-} +-- This had to be moved to the top level, due to an apparent bug in the ghc inliner introduced in ghc 7.0.x+reflectBefore :: Reifies s a => Tagged s b -> Tagged s b+reflectBefore = liftA2 seq reflect+{-# NOINLINE reflectBefore #-}+ reify :: a -> (forall s. Reifies s a => Tagged s w) -> w reify a k = unsafePerformIO $ do p <- newStablePtr a- -- reifyStorable p (stable (reflect `before` (return <$> k)))- reifyStorable p (stable (return <$> k))+ reifyStorable p (stable (reflectBefore (return <$> k))) where stable :: Retag (s' (StablePtr a')) (Stable s' a') stable = retag- -- before :: Tagged (s' a') a' -> Tagged (s' a') r -> Tagged (s' a') r- -- before = seq {-# NOINLINE reify #-}-
reflection.cabal view
@@ -1,5 +1,5 @@ name: reflection-version: 0.3.2+version: 0.3.3 license: BSD3 license-file: LICENSE author: Edward A. Kmett, Oleg Kiselyov and Chung-chieh Shan