Именованная реализация к реализации по умолчанию

Я определил именованную реализацию для класса типов Ord для типа Int.

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

Возможно ли это в Идрисе?

1 ответ

Решение

Это возможно, поскольку Idris 0.12 использует using-блоков:

Экспортируйте ваш названный интерфейс в один модуль, скажем 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]

Это должно напечатать [3, 2, 1],

Другие вопросы по тегам