小编Her*_* Yi的帖子

数据族实例非法绑定到内置语法:()

我正在尝试定义一个数据类型系列,其中一个参数导致空元组的类型(),但它不编译.这是一个最小的工作示例:

{-# LANGUAGE TypeFamilies #-}

data family F a
data instance F Int = ()
Run Code Online (Sandbox Code Playgroud)

抛出的编译器错误说"内置语法的非法绑定:()".为什么我得到这个错误,即使我不是要改变定义(),而是将其设置为某些计算的输出(类型族的评估)?

对于它的价值,当程序编译()改为Bool代替.

haskell compiler-errors type-families

3
推荐指数
1
解决办法
259
查看次数

Data.Map的合格导入与Prelude冲突

我想在我的代码中使用Prelude.mapData.Map.map用于不同的目的,但合格的导入Data.Map似乎没有帮助:

Prelude> import Data.Map as M
Prelude M> map

<interactive>:3:1:
    Ambiguous occurrence ‘map’
    It could refer to either ‘M.map’
                             imported from ‘Data.Map’
                             (and originally defined in ‘containers-0.5.0.0:Data.Map.Base’)
                          or ‘Prelude.map’
                             imported from ‘Prelude’ (and originally defined in ‘GHC.Base’)
Run Code Online (Sandbox Code Playgroud)

(我还拍了一个错误信息的截图,你可以在这里看到.)

我希望能够分别使用mapM.map; 我怎样才能做到这一点?

import haskell module compiler-errors

3
推荐指数
1
解决办法
155
查看次数

使用GADT自动派生类型类约束

我正在编写一个库来处理使用延迟评估的无限序列.为简洁起见,我使用广义代数数据类型(GADT)来断言Ord对序列中每个术语的索引的约束.因此,以下类型检查:

{-# LANGUAGE GADTs #-}

data Term ix cff where
  Term :: (Ord ix) => ix -> cff -> Term ix cff

data Sequence ix cff where
  Seq :: [Term ix cff] -> Sequence ix cff

f (Seq (Term i x:_)) (Seq (Term j y:_)) = i < j

{-
add :: Sequence ix cff -> Sequence ix cff -> Sequence ix cff
add (Seq tms1) (Seq tms2) = Seq (addAlong (<) tms1 tms2)
    where addAlong :: (ix …
Run Code Online (Sandbox Code Playgroud)

haskell types type-inference algebraic-data-types gadt

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