如何在类型声明(Repa)中解决运算符的使用?

时间:2015-11-06 12:32:48

标签: haskell repa

我正在使用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

在类型声明中解决类型运算符/构造函数的使用的正确方法是什么? (我会更多地谷歌,但无论如何也想要了解更多)

1 个答案:

答案 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。

相关问题