В GPipe есть функция для записи в текстуру:
writeTexture2D :: forall ctx b c h w os f m. (ContextHandler ctx, MonadIO m, BufferFormat b, ColorSampleable c, BufferColor (Color c (ColorElement c)) h ~ b, h ~ HostFormat b) => Texture2D os (Format c) -> Level -> StartPos2 -> Size2 -> [h] -> ContextT ctx os m ()
У меня проблема с пониманием части сигнатуры, где используется равенство типов. Существует учебник , в котором говорится об этом, но я не вдавался в подробности, объясняющие то, что я считаю очевидным.
BufferColor (Color c (ColorElement c)) h ~ b, h ~ HostFormat b
Итак, что я знаю:
- существует экземпляр
BufferFormat
для b
BufferFormat
класс имеет связанный тип HostFormat
h ~ HostFormat b
говорит мне, что h
должно бытьHostFormat
для данного b
? h ~ b
это говорит мне, что h и b должны быть одного типа?
Но когда я смотрю на экземпляры из BufferFormat b
Я не думаю, что есть такой экземпляр, который бы имел b
, равный его собственному HostFormat b
? Где я делаю ошибку?