我正在使用Repa,下面的代码可以编译和运行。
import qualified Data.Array.Repa as R
--t:: R.Array R.U (R.Z R.:. Int) Float
--t = R.fromListUnboxed (R.Z R.:. (10::Int)) ([1.0..10]::[Float])
main = do
let x = R.fromListUnboxed (R.Z R.:. (10::Int)) ([1.0..10]::[Float])
print x
我相信(从ghci中检查)x具有我声明要具有的类型签名,但如果我取消注释与t相关的所有内容,则会出现此错误:
Illegal operator ‘R.:.’ in type ‘R.Z R.:. Int’
Use TypeOperators to allow operators in types
在类型声明中解决类型运算符/构造函数的使用的正确方法是什么? (我会更多地谷歌,但无论如何也想要了解更多)
答案 0 :(得分:2)
您可以使用命令行选项-XTypeOperators
来ghc或ghci,例如:
ghci -XTypeOperators ...
或者您可以在源文件中使用OPTIONS_GHC编译指示:
{-# OPTIONS_GHC -XTypeOperators #-}
我不确定为什么 LANGUAGE TypeOperators
无法识别。
或LANGUAGE编译指示:
{-# LANGUAGE TypeOperators #-}
(确保拼写正确。)
在这种情况下,t
的类型是可推断的,因此您可以在ghci中使用:t
:
$ ghci
Prelude> import qualified Data.Array.Repa as R
Prelude R> let t = R.fromListUnboxed (R.Z R.:. (10::Int)) ([1.0..10]::[Float])
Prelude R> :t t
t :: R.Array R.U (R.Z R.:. Int) Float
注意:我使用的是GHC 7.10.2。