Runtime компиляция в Haskell

топ 100 блогов yantayga — 22.01.2011 Слышал я, о многоуважаемый all, что в Лиспе можно произвольные данные тут же по ходу выполнения программы "сынтерпретировать" и выполнить, что потенциально дает самомодифицирующиеся программы. А есть ли подобное в Хаскеле? Или возможно ли хотя бы теоретически? Можно ли как то с самой программой слинковать компилятор (учитывая что мы можем использовать Хаскель как длл в связке с программами, написанными на других языках)

UPD.
Просто выполнить код a la ghci можно так (частично взято отсюда):
{-# LANGUAGE NoMonomorphismRestriction #-}
module Test
where

import Language.Haskell.Interpreter
import Control.Monad

run = runInterpreter . test

test :: String -> Interpreter String
test s =
  do
    setImports ["Prelude"]
    res <- eval s
    return res

А вот так можно выполнить некую заранее неизвестную (кроме типа) операцию:
{-# LANGUAGE NoMonomorphismRestriction #-}
module Test
where

import Language.Haskell.Interpreter
import Control.Monad
import System.IO

run = runInterpreter . test

getOperation s = interpret s (as::(Double -> Double))

test :: String -> Interpreter Double
test s =
  do
    setImports ["Prelude"]
    op <- getOperation s
    let res = op 1.0
    return res
   
main :: IO ()
main =
  do
    s <- getLine
    res <- run s
    print res
    return ()

Для примера:
*Test> main
sin
Right 0.8414709848078965
*Test> main
cos
Right 0.5403023058681398

Замечания, критика, поправки и вежливые ругательства приветствуются...
Кстати, как можно сделать в жж syntax colorizing?

Оставить комментарий

Архив записей в блогах:
Консов ЛЭ штрафуют за одну позицию в чеке. Вопрос, какого рода им причиняют наказания, если убоявшись его, второй лак в мой чек конс купила себе сама (я уперлась рогом - мне второй лак не нужен, мне нужна наличность на корм для кошки). Это вчера. ...
Гигантский осьминог Дофлейна и дайвер. 2005 год. Никон Д70+Никкор 10.5 мм. Осьминог большой, но не на столько- ракурс съемки фишаем, однако. Самая цитируемая в сети моя фотография. Вчера был Всемирный день осьминога. Грех не отметить данное событие и не вспомнить мои знаковые фоточки ...
Со всей страны воинские эшелоны идут к украинской границе. Первая гвардейская танковая армия покидает полигон под Воронежем и перебрасывает технику к границе с Украиной. Балтийские десантные корабли. Тихоокеанский флот. Авиация. Артиллерия. Человек, незаконно занимающий пост ...
Всё, закончился двухнедельный отпуск - взя́л и охуе́л от этой Хорватии, на всякий случай))) но рассиюшку берут там и нигида́ ебааа́ть™ не уважают довольно о́чень да́же симпатичные мне почти все́ местные обыватели)))((( ...
Официально В среду официальный представитель Министерства иностранных дел КНДР дал следующий ответ на вопрос корреспондента ЦТАК, связанный с тем, что вооруженные силы США перебрасывают на Корейский полуостров стратегические бомбардировщики «В-52». По сообщениям, вслед за 8 ...