Что делает функция get и put? - PullRequest
0 голосов
/ 08 декабря 2018

Из наших лекционных заметок :

get' state = (state, state)
put' item state = ((), item)     -- () is void value

data State s a = State (s -> (a, s))

-- Functions get and put:        -- (sic!)

get :: State s s
get = State get'

put :: s -> State s ()
put item = State (put' item)

Я полностью потерялся в этих двух функциях get и put.

Во-первых, нетстрелка в сигнатуре типа get:

get :: State s s

Что это значит?

Что означает s в get и put?Они заявляют?

1 Ответ

0 голосов
/ 08 декабря 2018

Помните, что State s a - это, по сути, функция s -> (a, s), то есть функция, которая принимает состояние и возвращает значение некоторого типа a и новое состояние.

Итак get :: State s ss -> (s, s), функция, которая просто возвращает текущее состояние.

put :: s -> s -> ((), s) реализована как s -> _ -> ((), s), функция, которая принимает данное состояние, игнорирует текущее состояние, возвращает данное состояние ине производит никаких новых значений.

...