2016-05-18 13 views
2

Ich definierte eine benannte Implementierung für die Typklasse Ord für Typ Int.benannte Implementierung zu Standardimplementierung

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

Wie kann ich importieren diese benannte Implementierung und verwenden Sie es als „default“

  • so in einem anderen Modul möchte ich diese Implementierung importieren
  • Mark es als Standard
  • Und es verwenden als ob es Standard

-

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

Ist das in Idris möglich?

+0

Ich glaube, diese Funktion wurde im vergangenen Jahr hinzugefügt, aber ich weiß nicht, wie man es benutzt. – dfeuer

+0

Eine Idee, wie diese Funktion aufgerufen wird? –

Antwort

3

Dies ist möglich, da Idris 0,12 using -Blöcke mit:

Export Ihres benannten Schnittstelle in einem Modul, sagt 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 

es gerade in einem anderen Modul importiert Dann und alles einpacken, die verwendet werden sollen es als Standard in einem entsprechenden using -Block wie so:

-- 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] 

Dies solltedrucken.

+0

Ich bin nicht ganz sicher, was Sie fragen. Soweit ich es verstehe, ändert 'using implementation 'die Standardimplementierung der entsprechenden Schnittstelle, die der Compiler auswählt, wenn Sie nicht explizit eine' @ {myOrd}' - Syntax angeben. Normalerweise wird die unbenannte Implementierung ausgewählt. –

Verwandte Themen