相关疑难解决方法(0)

多态数据类型的函数

数据Foo a定义如下:

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
Run Code Online (Sandbox Code Playgroud)

有些情况:

fiveFoo :: Foo Int
fiveFoo = Foo 5

falseFoo :: Foo Bool
falseFoo = Foo False
Run Code Online (Sandbox Code Playgroud)

我如何定义任何函数b -> Foo a,例如:

getFoo :: (Show a, Typeable a) => String -> Foo a
getFoo "five" = fiveFoo
getFoo "false" = falseFoo
Run Code Online (Sandbox Code Playgroud)

这里 …

polymorphism haskell existential-type gadt

4
推荐指数
1
解决办法
479
查看次数

标签 统计

existential-type ×1

gadt ×1

haskell ×1

polymorphism ×1