相关疑难解决方法(0)

返回 GADT 任何构造函数结果的函数

当我尝试创建一个返回函数Thing aThingGADT 在哪里)时,我目前正在与类型检查器进行斗争。一个最小的例子:

{-#LANGUAGE GADTs, EmptyDataDecls #-}
module Main where

-- Define a contrived GADT
data TFoo
data TBar
data Thing a where
  Foo :: Int -> Thing TFoo
  Bar :: String -> Thing TBar

combine :: [Thing a]
combine = [Foo 1, Bar "abc"]

main :: IO ()
main = undefined
Run Code Online (Sandbox Code Playgroud)

a类型检查器对不匹配感到不高兴TBar。想必这是因为它已经推断出来aTFoo。但是,这是令人惊讶的,因为使用常规求和类型,您可以执行以下操作:

data Thing = Foo Int | Bar String

combine :: [Thing]
combine = [Foo 1, Bar …
Run Code Online (Sandbox Code Playgroud)

haskell typing gadt

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

标签 统计

gadt ×1

haskell ×1

typing ×1