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 プラグマを使用できます。

{-# OPTIONS_GHC -XTypeOperators #-}

LANGUAGE TypeOperators認識されない理由がわかりません。

または LANGUAGE プラグマ:

{-# LANGUAGE TypeOperators #-}

(スペルは正確に記入してください。)

この場合、 の型は推論可能であるため、ghci でt使用できます。: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 を使用しています。

于 2015-11-06T13:27:47.940 に答える