2016-05-18 6 views
2

タイプIntのタイプOrdの名前付き実装を定義しました。デフォルト実装への名前付き実装

ので、別のモジュールで、私はこの実装をインポートする方法私は、この名前の実装をインポートし、「デフォルト」として使用することができます

  • [mijnOrd] Ord Int where 
        compare n1 n2 = ... 
    

  • マークそれをデフォルト
  • として、それを使用

    - それはデフォルト

たかのように

sort [1,5,2] -- output without importing as default: [1,2,5] 
sort [1,5,2] -- output with importing as default: [5,2,1] 

Idrisではこれが可能ですか?

+0

この機能は過去1年間に追加されたと思いますが、使用方法はわかりません。 – dfeuer

+0

この機能がどのように呼び出されていますか? –

答えて

3

これはusing -blocks使用イドリス0.12以降可能です:

輸出一つのモジュールであなたの名前のインターフェイスを、MyOrd.idrを言う:

module MyOrd 

-- Reverse order for `Nat` 
export 
[myOrd] Ord Nat where 
    compare Z Z = EQ 
    compare Z (S k) = GT 
    compare (S k) Z = LT 
    compare (S k) (S j) = compare @{myOrd} k j 

それからちょうど別のモジュールでそれをインポートして使用する必要があり、すべてを包みますそれはそうのような対応using - ブロックのデフォルトとして:

-- Main.idr 
module Main 

import MyOrd 

using implementation myOrd 
    test : List Nat -> List Nat 
    test = sort 

main : IO() 
main = putStrLn $ show $ test [3, 1, 2] 

これはを印刷する必要があります。

+0

あなたが何を求めているのかよく分かりません。私が理解する限り、 'using implementation'は、コンパイラが' @ {myOrd} '構文を使って明示的に指定しないと、対応するインタフェースのデフォルト実装を変更します。通常、名前のない実装が選択されます。 –

関連する問題