[personal profile] sassa_nf
кого вкладывать внутрь?

Упражнение: ну, все монады уже давно написаны, поэтому пишем через FFI работу с консолью. Техническая часть работает, там всего-то десяток интересных однострочных функций, но теперь бы оформить правильно, то есть состояние консоли завернуть в монаду reader-writer-state.

Поскольку все обращения к FFI возвращают тип (IO a), нужно правильно коммутировать Console и IO.

Например, можно так:

data Console a = Console (ForeignPtr ConsoleStructRaw) (IO a)
openConsole :: Console a

а можно так:

data Console a = Console (ForeignPtr ConsoleStructRaw) a
openConsole :: IO (Console a)

Дык, как правильнее? С моей дилетантской т.з. кажется первое, хотя проще пишется второе.

Ну, и чтоб два раза не вставать: FFI пользуется типами вроде CInt; имеет ли смысл CInt тут на месте перекрутить в Int (например, чтобы потом компилятор не рассказывал, что я не могу сравнивать координату консоли x и 0)
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

sassa_nf

February 2026

S M T W T F S
1234567
891011121314
15161718192021
222324252627 28

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2026 03:13 am
Powered by Dreamwidth Studios