что за Reader монада
Nov. 27th, 2012 09:38 amА вот скажите, пожалуйста.
Типа, все объекты и стрелки переносятся generically, а выборочно Console ConsoleStruct = (), и Console getCursorCoords = cursorCoords?
С одной стороны - вроде бы да, а с другой стороны - дык, fmap getCursorCoords в принципе тоже существует. Как же так?
Нет, не так. Поскольку CCC, то getCursorCoords соответствует curried функция ()→IO Coords, т.е. (IO Coords)ConsoleStruct. Этот объект, как и все, отображается функтором, т.е. попадаем в Console Coords. А cursorCoords - просто именованная ссылка на именно этот объект. Вот.
data Console a = Console { runConsole :: ConsoleStruct -> IO a }
data Coords = Coords Int Int
...
cursorCoords :: Console Coords
cursorCoords = Console getCursorCoords
getCursorCoords :: ConsoleStruct -> IO a
getCursorCoords c = someNativeFunction c >>= peekТак вот, что за cursorCoords? Это функтором перенесённая getCursorCoords? С одной стороны - вроде бы да, а с другой стороны - дык, fmap getCursorCoords в принципе тоже существует. Как же так?
Нет, не так. Поскольку CCC, то getCursorCoords соответствует curried функция ()→IO Coords, т.е. (IO Coords)ConsoleStruct. Этот объект, как и все, отображается функтором, т.е. попадаем в Console Coords. А cursorCoords - просто именованная ссылка на именно этот объект. Вот.