Тут утверждают время от времени, что мол якобы на Хаскелле ирудно писать императивно.
Ну, с помощью новейшей библиотеки для компилятора GHC можно прямо в код на Хаскелле вставлять вставки на бейсике!
Language.BASIC: A simplified version of the original BASIC embedded in Haskell.
Спасибо господину Леннарту Аугустссону за то, что он очень сильно облегчил работу императивным программистам на Хаскелле!
Пример кода:
{-# OPTIONS_GHC -fno-warn-type-defaults #-}
{-# LANGUAGE ExtendedDefaultRules, OverloadedStrings #-}module HiLo where
import Language.BASIC
main :: IO ()
main = runBASIC $ do
10 GOSUB 1000
20 PRINT "* Welcome to HiLo *"
30 GOSUB 1000
100 LET I := INT(100 * RND(X))
-- 110 PRINT I
200 PRINT "Guess my number:"
210 INPUT X
220 LET S := SGN(I-X)
230 IF S <> 0 THEN 300
240 FOR X := 1 TO 5
250 PRINT X*X;" You won!"
260 NEXT X
270 STOP
300 IF S <> 1 THEN 400
310 PRINT "Your guess ";X;" is too low."
320 GOTO 200
400 PRINT "Your guess ";X;" is too high."
410 GOTO 200
1000 PRINT "*******************"
1010 RETURN
9999 END
PS. Кстати, производительность этого бейсика примерно на уровне Си (GCC) получилась...
Здравствуйте, geniepro, Вы писали:
G>Спасибо господину Леннарту Аугустссону за то, что он очень сильно облегчил работу императивным программистам на Хаскелле!
Здравствуйте, geniepro, Вы писали:
G>Это было к вопросу о том, нужны ли макросы для построения eDSL или достаточно мощной системы типов...
Нужны. Использовать перегруженные а) числовые и б) строковые литералы для того, чтобы получить а) нумерацию строк б) возможность использовать точку с запятой в строчках вида 250 PRINT X*X;" You won!" — очень остроумный хак, но это тот случай, когда написать парсер проще.
Здравствуйте, palm mute, Вы писали:
PM>Здравствуйте, geniepro, Вы писали:
G>>Это было к вопросу о том, нужны ли макросы для построения eDSL или достаточно мощной системы типов... PM>Нужны. Использовать перегруженные а) числовые и б) строковые литералы для того, чтобы получить а) нумерацию строк б) возможность использовать точку с запятой в строчках вида 250 PRINT X*X;" You won!" — очень остроумный хак, но это тот случай, когда написать парсер проще.
Это справедливо, если рассматривать необходимость построения eDSL с произвольным синтаксисом, стоит ли овчинка выделки — вопрос...
Причём я не уверен, что их (DSL) можно сделать именно как eDSL, не вынося код в строки или что-нибудь подобное (почти теряя бесшовность "склейки", если не брать eval из динамически-типизированных языков).
Re: [Haskell] Basic rules!
От:
Аноним
Дата:
13.02.09 10:40
Оценка:
Здравствуйте, geniepro, Вы писали:
G>Ну, с помощью новейшей библиотеки для компилятора GHC можно прямо в код на Хаскелле вставлять вставки на бейсике!
Оно конечно класно, но не более как пример что "и так могём".
А вот что было бы реально востребовано — это SQL.
Совершенно замечательно — пишем SQL запрос, который отдаёт список туплов (или структур).
Причём с возможностью изменять диалекты в зависимости от конкретного сервера.
Ну и драйверы к этому для всех распространённых RDBMS а не только для ODBC и SQLite как в HDBC.