3
我正在尋找方式將類型信息帶入Haskell的值級別。如何將類型信息帶入Haskell的值級別?
我知道將任何類型信息表示爲值的一種方法是Language.Haskell.TH.Type
。 有沒有什麼辦法可以實現Proxy a
並返回Language.Haskell.TH.Type
(或替代類型來表示任何類型)的函數,如下所示的a
類型?
如果您有更好的想法將類型信息作爲不使用Language.Haskell.TH.Type
的值,請告訴我。
import Data.Proxy (Proxy)
import Language.Haskell.TH (Type, TypeQ)
-- |
-- >>> amazing (Proxy :: Proxy Bool)
-- ConT GHC.Types.Bool
--
-- >>> amazing (Proxy :: Proxy [String])
-- AppT ListT (ConT GHC.Base.String)
amazing :: Proxy a -> Type
amazing p = undefined
-- |
-- Or if above is impossible, how about this?
amazingQ :: Proxy a -> TypeQ
amazingQ p = undefined
即使我自己沒有使用它 - 但是你看看[Data.Data](https://hackage.haskell.org/package/base-4.7.0.1/docs/Data-Data.html )也許它提供了足夠的信息。 – epsilonhalbe
['typeRep'](http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Typeable.html#v:typeRep)似乎足夠接近。 – chi