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