0

我在玩 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 具有的类型签名,但是如果我取消注释与 t 相关的所有内容,我会收到此错误:

Illegal operator ‘R.:.’ in type ‘R.Z R.:. Int’
  Use TypeOperators to allow operators in types

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

4

1 回答 1

2

-XTypeOperators您可以使用ghc 或 ghci的命令行选项,例如:

ghci -XTypeOperators ...

或者,您可以在源文件中使用 OPTIONS_GHC pragma:

{-# OPTIONS_GHC -XTypeOperators #-}

我不确定为什么LANGUAGE TypeOperators不被识别。

或 LANGUAGE 杂注:

{-# LANGUAGE TypeOperators #-}

(确保拼写正确。)

在这种情况下,类型t是可推断的,因此您可以:t在 ghci 中使用:

$ 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。

于 2015-11-06T13:27:47.940 回答