2015-11-06 42 views
0

我正在玩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

您可以使用命令行選項-XTypeOperators要麼GHC或ghci的,如:

ghci -XTypeOperators ... 

或者你可以使用OPTIONS_GHC編譯在源文件:

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

+0

謝謝。我只是添加了語言雜注。瞭解一些關於文學的想法來理解爲什麼這是必要的補充? – stian

+0

下面是一個很好的開始:[24天的GHC擴展 - 類型操作符](https://ocharles.org.uk/blog/posts/2014-12-08-type-operators.html) – ErikR

+0

我想我有寫更多的說謝謝:) – stian

相關問題