相关疑难解决方法(0)

最新GHC中弃用的DatatypeContexts:为什么?

我只是做了一些Haskell开发,并在新版本的GHC上重新编译了一些旧代码:

The Glorious Glasgow Haskell Compilation System, version 7.2.1
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到以下错误:

警告:不推荐使用-XDatatypeContexts:它被广泛认为是错误的,并且已从Haskell语言中删除.

当您拥有以下格式的代码时,会出现这种情况:

data Ord a => MyType a
    = ConstructorOne a
    = ConstructorTwo a a
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么这个功能首先被弃用,而我应该做些什么而不是实现相同或类似的功能呢?

haskell deprecated language-extension

65
推荐指数
2
解决办法
6006
查看次数

对数据声明的类型类约束

显然,在数据声明[src],[src]上添加类型类约束是个坏主意.

我个人并没有想要限制我创建的数据类型中的类型,但对于我来说,为什么语言设计师"认为允许这是一个坏主意"并不明显.这是为什么?

haskell types typeclass

20
推荐指数
2
解决办法
4640
查看次数

对 GADT 和传播约束感到困惑

有很多关于GADTs比 更好的问答DatatypeContexts,因为 GADT 会自动在正确的位置提供约束。例如这里这里这里。但有时似乎我仍然需要一个明确的约束。这是怎么回事?改编自此答案的示例:

{-# LANGUAGE  GADTs  #-}
import Data.Maybe                                              -- fromJust

data GADTBag a  where
  MkGADTBag :: Eq a => { unGADTBag :: [a] } -> GADTBag a

baz (MkGADTBag x) (Just y) = x == y

baz2           x        y  = unGADTBag x == fromJust y


-- unGADTBag :: GADTBag a -> [a]                               -- inferred, no Eq a

-- baz ::          GADTBag a -> Maybe [a] -> …
Run Code Online (Sandbox Code Playgroud)

haskell gadt

2
推荐指数
1
解决办法
257
查看次数