Haskell:-fglasgow-exts нужно избежать кода, который требует этого?

Я делаю это

import sys
print sys.platform

Документы здесь: sys.platform.

Все, в чем Вы нуждаетесь, находится, вероятно, в sys модуле.

7
задан ezpz 25 August 2009 в 19:40
поделиться

5 ответов

Вместо запроса всех расширений GHC укажите, какие из них используются, используя прагматический механизм LANGUAGE :

{-# LANGUAGE ParallelListComp #-}
xy = [ x+y | x <- [1, 2, 3, 4] | y <- [5, 6, 7, 8] ]

Я предполагаю, что оба a и b читают из списка на в то же время здесь возникают проблемы ...? Так, если расширение Глазго - единственное средства для поддержки этой конструкции, это чаще всего для создания списка другим способом или просто предположите, что будут доступны расширения?

Параллельное повторение одного и того же списка разрешено. Проблема в том, что параллельное понимание не определено в стандарте Haskell 98. Их можно легко смоделировать с помощью zip :

xy = [x+y | (x,y) <- zip [1, 2, 3, 4] [5, 6, 7, 8]]

Сами по себе расширения неплохие - большая часть стандартной библиотеки использует расширения того или иного вида. Многие из них рассматриваются для включения в Haskell ', следующую итерацию стандарта Haskell. Некоторые расширения, такие как GADT, обычно используются во всех написанных пользователем библиотеках. Другие, такие как шаблоны или бессвязные экземпляры, вероятно, не рекомендуется использовать, если вы действительно не знаете, что делаете.

Любое расширение, указанное на странице вики HaskellExtensions с поддержкой двух или более компиляторов, вероятно, безопасно использовать.

12
ответ дан 6 December 2019 в 06:24
поделиться

Можно использовать расширения. Отметьте их с помощью -XFoo или LANGUAGE FOO. Какие расширения вы решите использовать, вы можете выбрать те, которые перечислены для включения в Haskell Prime.

6
ответ дан 6 December 2019 в 06:24
поделиться

GHC определенно широко распространен - ​​я думаю, что это наиболее часто используемый компилятор Haskell, поэтому он, вероятно, не вызовет особых проблем. Тем не менее, вы всегда должны пытаться писать код, соответствующий стандартам - может быть, не для личных проектов, а для OSS или рабочих, безусловно.

Все может случиться, правда? То же самое может и внезапное изменение компилятора на полпути вашего проекта.

В OSS разные люди используют разные компиляторы - например, HUGS также довольно распространен.

6
ответ дан 6 December 2019 в 06:24
поделиться

Вы хотите:

fibs = 0 : 1 : zipWith (+) fibs (tail fibs)

Это потому, что понимание списков на самом деле не работает с самореференциальными списками. Кроме того, хотя GHC более популярен, HUGS обычно выдает более четкие сообщения об ошибках.

3
ответ дан 6 December 2019 в 06:24
поделиться

Я собирался предложить использовать a «, » вместо « | », но потом я узнал, что это делает что-то еще, чем я ожидал.

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

Некоторые расширения не оказывают никакого отрицательного влияния на читаемость (результирующий код очевиден), например MultiParamTypeClasses , FlexibleContexts , FlexibleInstances .

Другие требуют от читателя знакомства с новым синтаксисом и понимания того, что этот синтаксис означает. Примерами для них могут быть ParallelListComp , TypeFamilies , FunctionalDependencies . В этом случае я бы рекомендовал избегать этих расширений, если они не приносят пользу. В этом случае вы можете просто использовать zip , как предлагал Джон Милликин, или выполнить рефакторинг кода как предложенный неизвестный.

Предложение +1 дона по использованию тех, которые планируется включить в Haskell Prime ].

Haskell 2010 должен быть выпущен в конце 2009 года. Набор изменений, которые необходимо включить, будет объявлен на симпозиуме Haskell 3 сентября 2009 года.

1
ответ дан 6 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

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