了解类型家庭

Understanding type family

我有以下代码:

{-# 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.

的两个参数的类型

不过我不明白(a :: Nat) (b :: Nat)后面的:: Nat是什么意思。任何见解表示赞赏。

最后的:: Nat表示类型级函数returns一个Nat.