하스켈에서 유형 정보를 가치 수준으로 가져 오는 방법을 찾고 있습니다.하스켈에서 유형 정보를 가치 수준으로 가져 오는 방법은 무엇입니까?
모든 유형 정보를 값으로 표시하는 한 가지 방법은 Language.Haskell.TH.Type
입니다. Proxy a
을 사용하고 다음과 같이 a
유형의 Language.Haskell.TH.Type
(또는 어떤 유형을 나타내는 대체 유형)을 반환하는 함수를 구현할 수있는 방법이 있습니까?
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