Funções para tipos de dados polimórficos
dadosFoo a
é definido como:
data Foo a where
Foo :: (Typeable a, Show a) => a -> Foo a
-- perhaps more constructors
instance Show a => Show (Foo a) where
show (Foo a) = show a
com algumas instâncias:
fiveFoo :: Foo Int
fiveFoo = Foo 5
falseFoo :: Foo Bool
falseFoo = Foo False
Como posso definir qualquer função deb -> Foo a
, por exemplo:
getFoo :: (Show a, Typeable a) => String -> Foo a
getFoo "five" = fiveFoo
getFoo "false" = falseFoo
AquigetFoo
não digita cheque comCouldn't match type ‘a’ with ‘Bool’
.
A única coisa que me interessa aqui é paraa
ser de classeShow
para que eu possa usargetFoo
gostar:
main = getLine >>= (print . getFoo)