2016-04-22 2 views

ответ

5

Ваш interface на самом деле имеет два параметра: a и f. Но f должно быть достаточно, чтобы выбрать implementation:

interface Num a => Color (a : Type) (f : a -> Type) | f where 

f здесь называется determining parameter.

Вот бессмысленный полный пример:

import Data.Fin 

interface Num a => Color (a : Type) (f : a -> Type) | f where 
    foo : (x : a) -> f (1 + x) 

Color Nat Fin where 
    foo _ = FZ 

x : Fin 6 
x = foo {f = Fin} 5 
+1

Ooo я имел интерфейс два параметра, но я не понимаю, что я могу использовать '| f' заставить только одного решить, это отлично. – ScarletAmaranth