Я ищу простое представление вектора координат 2d. Моя первая идея была простой кортеж (c, c)
, но это не устраивает моих потребностей.Конструкция вектора координат 2d
Это то, что я хочу:
- Экземпляры функтора и Applicative
- Возможность иметь различные типы, которые имеют ту же семантику (например
ScreenCoord
иGameCoord
). - Простые конструкторы данных (например,
ScreenCoord c c
) - Возможность писать общий код за
Coord
.
Я не уверен, как это сделать. Все, что я пробовал, либо потребовало дублирования кода instance
, чтобы получить отдельные типы, либо у него были длинные конструкторы данных, такие как ScreenCoord (Coord c c)
, которые казались ненужными.
Что было бы идеальным представлением здесь?
Спасибо за ссылки, но как я могу создать «отличные синонимы» в «Vertex2»? Я не уверен, что «отличные синонимы» - правильная терминология. – Pubby
@Pubby 'newtype' - это механизм запроса типа проверки для обеспечения различия между другими идентичными типами. –
Я не уверен, что понимаю вас. Существуют объявления 'newtype', если вы хотите обернуть существующие данные и создать для него разные экземпляры. Существует расширение [NewtypeDeriving] (http://hackage.haskell.org/trac/haskell-prime/wiki/NewtypeDeriving). Существует пакет [newtype] (http://hackage.haskell.org/package/newtype) для использования 'pack' /' unpack'. Вы можете создавать собственные конструктор-подобные функции. – ony