У меня есть следующий код:
{-# 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)
. Любые идеи приветствуются.
type family Times :: Nat -> Nat -> Nat where (...)
? - person AJF   schedule 02.08.2019