Тип
search :: EnvV -> Store -> State
означает
search :: EnvV -> Store -> Variable -> Z
Таким образом, вы можете использовать
search envV store var = store (envV var)
, потому что envV var
является Location
, который затем применяется к store
для получения Z
.
Обратите внимание, что следующий код является правильным, даже если это немного озадачивает
search :: EnvV -> Store -> State
search envV store var = store (envV var)
Это озадачивает, потому что его тип показывает два аргумента, когда код ниже занимает три. Эквивалентный выше код чаще записываются как
search :: EnvV -> Store -> State
search envV store = \var -> store (envV var)
так, что даже в определении мы можем найти два аргумента, а значение результата, который на самом деле является функцией типа State
который отображает каждую переменную var
в его стоимость.
Далее приведенный выше код может быть упрощен для использования оператора композиции функций .
, как уже показал @ChrisMartin.
Функция типа '' EnvV' принимает Variable' а.к.а. 'String', в то время как вы подаете его в' Store'. Пожалуйста, уточните, что вы хотите сделать. – bereal
Несвязанное примечание: Круглые скобки не нужны для приложения-приложения (поэтому вы должны написать 'envV store' вместо' envV (store) '). –