Ну т.е. не так, как вчера, когда единственное мое достижение - это посеяный на работе планшет (похоже, безвозвратно), но сегодня тоже.
Разбираюсь я, значит, с тем, как таскать в свежем хаскеле версии 7.8.3 информацию о размере массива в типе. (я в курсе, что на дворе уже 8.*, у меня старая убунта. Но это, в общем, не важно - конкретно эта часть ghc не изменилась). Вроде разобрался. Теперь надо написать игрушечный пример. Но мы же не ищем легких путей, писать поверх Data.Vector и тем более Data.Array ниже нашего достоинства. Читаем про то, что есть в GHC.Prim, внимательно изучаем примопы с Array# и долго втыкаем на realWorld# :: StateT# RealWord и на перлы в духе (#a#) в сигнатурах типов. Тратим полдня на разборки, пишем ровно одну функцию. Потом находим пакет primitive на хакадже, который делает изрядную часть работы за нас.
Зато узнали много нового про устройство стека в рантайме GHC. Непонятно зачем.
Для привлечения внимания: два старых, но интересных поста для изучения
http://www.well-typed.com/blog/94/http://www.well-typed.com/blog/95/ Три полезных пакета на hackage
http://hackage.haskell.org/package/reflectionhttp://hackage.haskell.org/package/primitivehttp://hackage.haskell.org/package/primitive-extras Отдельно хочется сказать про reflection. Статья от Олега, по которой он сделан, откровенно мозговыносящая для человека не в теме. А вот пакет довольно прост и понятен в использовании.