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

how to resolve use of operators in type declaration (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 具有的类型签名,但是如果我取消注释与 t 相关的所有内容,我会收到此错误:

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

解决在类型声明中使用类型 operator/constructor 的正确方法是什么? (我会 google 一些,但无论如何也想问更多)

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

ghci -XTypeOperators ...

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

{-# OPTIONS_GHC -XTypeOperators #-}

我不知道为什么 LANGUAGE TypeOperators 不被识别。

或语言编译指示:

{-# 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。