Funktionen zu polymorphen Datentypen

DatenFoo a ist wie folgt definiert:

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

mit einigen Instanzen:

fiveFoo :: Foo Int
fiveFoo = Foo 5

falseFoo :: Foo Bool
falseFoo = Foo False

Wie kann ich eine Funktion aus @ definiereb -> Foo a, zum Beispiel

getFoo :: (Show a, Typeable a) => String -> Foo a
getFoo "five" = fiveFoo
getFoo "false" = falseFoo

HiergetFoo gibt keinen Scheck mit @ eCouldn't match type ‘a’ with ‘Bool’.

Das einzige, was mich hier interessiert, ist füra Klasse seinShowso kann ich @ verwendgetFoo mögen

main = getLine >>= (print . getFoo)

Antworten auf die Frage(6)

Ihre Antwort auf die Frage