Списки Haskell типов данных

Вы также можете объединить два env_keep высказывания в ответе Ахмеда Асуани в одно утверждение, подобное этому:

Defaults env_keep += "http_proxy https_proxy"

Также следует рассмотреть возможность указания env_keep только для одиночная команда как это:

Defaults!/bin/[your_command] env_keep += "http_proxy https_proxy"

6
задан Mark Rushakoff 23 June 2009 в 15:12
поделиться

3 ответа

Вот еще немного результатов, которые привели меня к выяснению проблемы:

*Main> [State, State]
[State,State]
*Main> :t State
State :: Place
*Main> :t NewYork
NewYork :: State

Похоже, это означает, что слово «Состояние» является допустимым конструктором для места и что состояние данных относится к до значения только Калифорния или Нью-Йорк.

Если вы немного измените программу, на:

data Place = Country Country
           | State State
           | City String
           deriving Show

data State = California
           | NewYork
           deriving Show

data Country = USA
             | Canada
             deriving Show

, тогда вы можете составить список, такой как [Страна США, штат Нью-Йорк], который должен иметь тип [Место]. Использование того же слова дважды, что и в первом примере, не «связывает» тип State вместе, как я ожидал.

Конечно, использование конструктора State State - это всего лишь вопрос предпочтения, я мог бы точно так же легко сделать AmericanState State в типе Place, если бы я был так склонен.

12
ответ дан 8 December 2019 в 05:23
поделиться
{-# LANGUAGE ExistentialQuantification #-}
data GenericPlace = forall a. Show a => GenericPlace a
places :: [GenericPlace]
places = [GenericPlace USA, GenericPlace NewYork]

См. Руководство пользователя GHC № 7.4.4 Конструкторы экзистенциально количественно определяемых данных , чтобы узнать о некоторых ограничениях этого подхода.


Существует углубленное исследование создания пригодных для использования гетерогенных коллекций. в Haskell.

Гетерогенные коллекции со строгими типами

Гетерогенная коллекция - это тип данных, который может хранить данные разных типов, обеспечивая при этом операции поиска, обновления, итерации и другие. Существуют различные виды гетерогенных коллекций, различающиеся представлением, инвариантами и операциями доступа. Мы описываем HList - библиотеку Haskell для строго типизированных гетерогенных коллекций, включая расширяемые записи. Мы проиллюстрируем преимущества HList в контексте безопасного доступа к базе данных в Haskell. Библиотека HList основана на распространенных расширениях Haskell 98. Наше исследование поднимает интересные вопросы, касающиеся системы типов Haskell, в частности, предотвращение перекрывающихся экземпляров и реификацию равенства типов и объединения типов.

7
ответ дан 8 December 2019 в 05:23
поделиться

Вы создаете неоднородный список (т.е. список содержит значения разных типов). Такая структура может быть статически или динамически типизированной. В любом случае, если мы знаем, что значение поддерживает конкретный интерфейс, мы можем использовать его в обернутом списке.

Самый лучший подход, IMO, - это экзистенциальная типизация, как показывает ephemient:

  • все значения поддерживают Show interface
  • все, что поддерживает Show, можно поместить в список
  • система типов гарантирует, что вы не сможете нарушить абстракцию
4
ответ дан 8 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: