如何解决类型声明 (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。
我在玩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。