Этот простой код не компилируется
import Data.Kind
type family F (k :: Type) :: (t :: k) -> Type
Сообщение об ошибке
• Expected a type, but ‘t’ has kind ‘k’
• In the kind ‘(t :: k) -> Type’
В каком-то смысле я понимаю, что это на самом деле определяет «семейство семейств типов», но я действительно не понимаю, почему это ограничение может существовать.
type family F (k :: Type) (t :: k) :: Type
работает, но у него другая семантика, и его нельзя использовать одинаково.
::
для семейства типов не являются видами? Итак, первый (будет) говорить, что тип t имеет вид k, а второй говорит, что тип t имеет вид k? - person David Young   schedule 30.06.2017type family F (k :: Type) :: k -> Type
ближе к тому, что вы хотите? - person chi   schedule 30.06.2017(k :: Type) -> (t :: k) -> Type
. Фактически, у него нет типа, который в настоящее время может быть выражен в Haskell. Первое семейство типов недопустимо, поскольку(->) :: Type -> Type -> Type
, но вы явно объявилиt :: k
иk
(переменная нового типа), не унифицируется сType
.(t :: Type) -> Type
будет полностью действительным (и эквивалентен типу в принятом ответе). - person user2407038   schedule 01.07.2017