我正在尝试定义一个数据类型系列,其中一个参数导致空元组的类型(),但它不编译.这是一个最小的工作示例:
{-# LANGUAGE TypeFamilies #-}
data family F a
data instance F Int = ()
Run Code Online (Sandbox Code Playgroud)
抛出的编译器错误说"内置语法的非法绑定:()".为什么我得到这个错误,即使我不是要改变定义(),而是将其设置为某些计算的输出(类型族的评估)?
对于它的价值,当程序编译()改为Bool代替.
我想在我的代码中使用Prelude.map和Data.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)
我希望能够分别使用map和M.map; 我怎样才能做到这一点?
我正在编写一个库来处理使用延迟评估的无限序列.为简洁起见,我使用广义代数数据类型(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)