Ответ 1
Это совпадение, что random
имеет точно такой же шаблон подписи/использования типа, что и внутренняя функция монады State
(и в этом случае вы могли бы быть более краткими, если возможно больше путают, с getRandom2 = State random
).
Однако в более общем плане это не будет применяться, а затем get
и put
являются удобными кусками для сантехники, смысл которых, возможно, более ясен, чем непосредственно писать внутреннюю функцию. Они также помогают абстрагироваться от точного представления, используемого State
- они на самом деле являются членами класса более общего класса MonadState
, поэтому вы можете написать более полиморфный код, используя их.