2012-06-08 5 views
0

Я ищу простое представление вектора координат 2d. Моя первая идея была простой кортеж (c, c), но это не устраивает моих потребностей.Конструкция вектора координат 2d

Это то, что я хочу:

  • Экземпляры функтора и Applicative
  • Возможность иметь различные типы, которые имеют ту же семантику (например ScreenCoord и GameCoord).
  • Простые конструкторы данных (например, ScreenCoord c c)
  • Возможность писать общий код за Coord.

Я не уверен, как это сделать. Все, что я пробовал, либо потребовало дублирования кода instance, чтобы получить отдельные типы, либо у него были длинные конструкторы данных, такие как ScreenCoord (Coord c c), которые казались ненужными.

Что было бы идеальным представлением здесь?

ответ

2

Вы могли бы быть заинтересованы в Tensor и vector-space

Vertex2 и другие из семейства Vertex представляют точки на экране (не векторы). vector-space-opengl содержит соответствующие экземпляры vector-space.

+0

Спасибо за ссылки, но как я могу создать «отличные синонимы» в «Vertex2»? Я не уверен, что «отличные синонимы» - правильная терминология. – Pubby

+1

@Pubby 'newtype' - это механизм запроса типа проверки для обеспечения различия между другими идентичными типами. –

+0

Я не уверен, что понимаю вас. Существуют объявления 'newtype', если вы хотите обернуть существующие данные и создать для него разные экземпляры. Существует расширение [NewtypeDeriving] (http://hackage.haskell.org/trac/haskell-prime/wiki/NewtypeDeriving). Существует пакет [newtype] (http://hackage.haskell.org/package/newtype) для использования 'pack' /' unpack'. Вы можете создавать собственные конструктор-подобные функции. – ony

Смежные вопросы