Loc a
- это связанный тип, который является способом объявления экземпляра семейства типов, связанного с экземпляром класса.Тип, представленный Loc a
, определяется типом a
и указывается в экземпляре: например,
instance Slice Foo where
type Loc Foo = Bar
...
Везде, где в объявлении класса присутствует Loc a
, оно будет заменено насоответствующий тип в экземпляре - поэтому функции экземпляра для Foo
будут выглядеть как
sliceEvents :: Foo -> [ResolvedEvent]
...
sliceFrom :: Foo -> Bar
...
Связанный тип также можно использовать в других функциях вне объявления класса, задав ограничение класса: например,
myFunction :: (Slice a) => a -> Loc a