Сопоставление имен переменных со значениями в предопределенных типах в Haskell

#haskell

Вопрос:

Я определил два типа, как показано ниже, с Vname, представляющим имя переменной в виде строки, и Val, представляющим целое значение:

 type Vname = String type Val = Int type State = ...  

с состоянием типа, которое еще предстоит определить (я также не уверен, правильно ли я сделал Vname и Val). Состояние должно быть отображением между Vname и Val, и я предполагаю, что оно будет соответствовать:

 type State = Vname-gt;Val  

но я действительно не уверен. Любые разъяснения по этому поводу были бы полезны.

это для реализации низкоуровневой машины с командами для работы со стеком, с Vname именем переменной числа, которое вы помещаете в стек, и Val значением. Типы существуют для пользовательских входных имен ghci.

Спасибо.

Комментарии:

1. На этот вопрос невозможно ответить в его нынешнем виде. Как мы должны знать, для чего предназначен любой из этих типов?

2. @leftaround о том, что это для реализации низкоуровневой машины с командами для работы со стеком, где Vname-имя переменной числа, которое вы помещаете в стек, а Val-значение. Типы существуют для пользовательских входных имен ghci. Я надеюсь, что это полезно, я приношу извинения, если нет, меня не слишком эффективно учили Хаскеллу.

Ответ №1:

Чтобы быть точным, вы определили два псевдонима типов, а не два типа.

State может быть функцией:

 type State = Vname -gt; Maybe Val  foo :: State foo "x" = Just 3 foo "y" = Just 5 -- etc foo _ = Nothing  

или это может быть список пар имя/значение.

 type State' = [(Vname, Val)]  foo' :: State' foo' = [("x", 3), ("y", 5)]  

Обратите внимание, что foo и x -gt; lookup x foo' (или flip lookup foo' ) в основном выполняют одну и ту же функцию.

То, что вы выберете, в основном зависит от того, как вы планируете использовать значение типа State . Иногда функция будет более удобной, в других случаях список пар. Я мог бы склониться к списку, так как проще создать функциональную форму (используя lookup , как показано выше) из списка, чем создать список из функции (поскольку для этого требуется список значений, к которым применяется функция).