이 올바른 방향을 가리켜 야 :
import Data.Typeable
import Data.Dynamic
import Control.Applicative
readMay :: Read a => String -> Maybe a
readMay s = case reads s of
(a,[]):_ -> Just a
_ -> Nothing
reconstruct :: Typeable a => (Maybe a -> r) -> (String, String) -> r
reconstruct k (typ,val) =
case typ of
"string" -> k $ cast =<< (readMay val :: Maybe String)
"int" -> k $ cast =<< (readMay val :: Maybe Int)
"double" -> k $ cast =<< (readMay val :: Maybe Double)
reconstructToDyn (typ,val) =
case typ of
"string" -> toDyn <$> (readMay val :: Maybe String)
"int" -> toDyn <$> (readMay val :: Maybe Int)
"double" -> toDyn <$> (readMay val :: Maybe Double)
을 당신이 필요로하는 모든 종류의 레지스트리의 어떤 종류가있는 경우에만. – augustss
레지스트리? 폐쇄 형 세트가 있지만 사용 방법을 잘 모르겠습니다. 흠. 나는'Data.Typable.TypeRep'을위한'Read' 인스턴스를 만들려고합니다. – jpaugh
형식이 닫혀 있으면 형식 이름에 case 문을 사용할 수 있습니다. 각 문은 형식 서명이있는 read 및 toDyn을 사용합니다. – augustss