Move DataBox into Utils.
AnyDataItem is effectively the same, so we could reuse DataBox for that too in the future.
This commit is contained in:
parent
9c77aed7b3
commit
9f172865ff
|
@ -39,6 +39,7 @@ import Data.Typeable
|
||||||
import System.IO.Unsafe
|
import System.IO.Unsafe
|
||||||
|
|
||||||
import qualified AST as A
|
import qualified AST as A
|
||||||
|
import Utils
|
||||||
|
|
||||||
-- | A type identifier.
|
-- | A type identifier.
|
||||||
type TypeKey = Int
|
type TypeKey = Int
|
||||||
|
@ -47,9 +48,6 @@ type TypeKey = Int
|
||||||
typeKey :: Typeable a => a -> TypeKey
|
typeKey :: Typeable a => a -> TypeKey
|
||||||
typeKey x = unsafePerformIO $ typeRepKey $ typeOf x
|
typeKey x = unsafePerformIO $ typeRepKey $ typeOf x
|
||||||
|
|
||||||
-- | Container for 'Data' items.
|
|
||||||
data DataBox = forall a. (Typeable a, Data a) => DataBox a
|
|
||||||
|
|
||||||
-- | Given a witness for a type, return witnesses for all the types that its
|
-- | Given a witness for a type, return witnesses for all the types that its
|
||||||
-- constructors take.
|
-- constructors take.
|
||||||
constrArgTypes :: (Data a, Typeable a) => a -> [DataBox]
|
constrArgTypes :: (Data a, Typeable a) => a -> [DataBox]
|
||||||
|
|
|
@ -23,6 +23,7 @@ module Utils where
|
||||||
import Control.Monad.State
|
import Control.Monad.State
|
||||||
import Data.Array.IArray
|
import Data.Array.IArray
|
||||||
import Data.List
|
import Data.List
|
||||||
|
import Data.Generics (Data)
|
||||||
import qualified Data.Map as Map
|
import qualified Data.Map as Map
|
||||||
import Data.Maybe
|
import Data.Maybe
|
||||||
import Data.Ord
|
import Data.Ord
|
||||||
|
@ -296,3 +297,6 @@ makeArraySize size def arr = array size [(i,arrayLookupWithDefault def arr i) |
|
||||||
-- This is like '(\/\/)'.
|
-- This is like '(\/\/)'.
|
||||||
replaceAt :: Int -> a -> [a] -> [a]
|
replaceAt :: Int -> a -> [a] -> [a]
|
||||||
replaceAt n rep es = [if i == n then rep else e | (e, i) <- zip es [0..]]
|
replaceAt n rep es = [if i == n then rep else e | (e, i) <- zip es [0..]]
|
||||||
|
|
||||||
|
-- | A type that can contain any 'Data' item.
|
||||||
|
data DataBox = forall t. Data t => DataBox t
|
||||||
|
|
Loading…
Reference in New Issue
Block a user