Вы также можете объединить два env_keep
высказывания в ответе Ахмеда Асуани в одно утверждение, подобное этому:
Defaults env_keep += "http_proxy https_proxy"
Также следует рассмотреть возможность указания env_keep
только для одиночная команда как это:
Defaults!/bin/[your_command] env_keep += "http_proxy https_proxy"
Вот еще немного результатов, которые привели меня к выяснению проблемы:
*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, если бы я был так склонен.
{-# 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, в частности, предотвращение перекрывающихся экземпляров и реификацию равенства типов и объединения типов.
Вы создаете неоднородный список (т.е. список содержит значения разных типов). Такая структура может быть статически или динамически типизированной. В любом случае, если мы знаем, что значение поддерживает конкретный интерфейс, мы можем использовать его в обернутом списке.
Самый лучший подход, IMO, - это экзистенциальная типизация, как показывает ephemient: