deniok: (typed lambda)
deniok ([personal profile] deniok) wrote2009-05-29 09:47 am
Entry tags:

Знаете ли вы, что...

В GHCi можно задавать многострочные let-определения функций, пользуясь скобочками :{ для входа в моду такого определения и :} - для завершения этой моды
Prelude> :{
Prelude| let { g op n [] = n
Prelude|     ; g op n (h:t) = h `op` g op n t
Prelude|     }
Prelude| :}
Prelude> g (*) 1 [1..4]
24
Правда, layout не поддерживается.

[identity profile] rvp74.livejournal.com 2009-05-29 07:02 am (UTC)(link)
Можно. Но не удобно потом редактировать в случае ошибки.
Так что в редакторе все же лучше. А еще лучше если редактор это поддерживает: выделил кусок и сказал "сделай eval в интерактивной среде"

[identity profile] deni-ok.livejournal.com 2009-05-29 04:13 pm (UTC)(link)
А мне нравится из кусочков функции, собирать, глядя за типом этих кусочков, через :t

Хорошо бы чтобы можно было в обе стороны. Редактор, из которого можно eval, и, обратно, какой-то tool, который из определений (последних) в сессии GHCi делал бы модуль или писал всё новое в текущий модуль.

[identity profile] ex-chrobin.livejournal.com 2009-05-29 02:56 pm (UTC)(link)
я не знал, что в гхци в принципе можно определить функцию

[identity profile] deni-ok.livejournal.com 2009-05-29 03:05 pm (UTC)(link)
Это же одна из удобнейших фич!
GHCi, помимо всего прочего, лучший из программируемых калькуляторов :)