Понимание семейства типов

У меня есть следующий код:

{-# LANGUAGE TypeFamilies #-}
type family Times (a :: Nat) (b :: Nat) :: Nat where 
   Times Z n = Z
   Times (S m) n = Plus n (Times m n)

Я знаю, что семейства типов позволяют вам писать функции на уровне типов. Однако для приведенного выше кода я знаю, что (a :: Nat) (b :: Nat) — это типы двух параметров, которые передаются функции Times.

Однако я не понимаю, что означает последнее :: Nat после (a :: Nat) (b :: Nat). Любые идеи приветствуются.


person ceno980    schedule 02.08.2019    source источник
comment
Было бы понятнее, если бы было написано type family Times :: Nat -> Nat -> Nat where (...)?   -  person AJF    schedule 02.08.2019


Ответы (1)


Последний :: Nat указывает, что функция уровня типа возвращает Nat.

person Daniel Wagner    schedule 02.08.2019
comment
Я не знала о типах семьи, спасибо, что поделились! - person Damián Rafael Lattenero; 02.08.2019