algebraic-data-types
У меня есть такой простой код в OCaml: type int_pair = int * int;; type a = A of int_pair;; let extract (A x) = x;; Тестирование моей функции extract, похоже, работает: # extract (A (1,2));; - : int_pair = (1, 2) Я упрощаю его, поэтому ему нужен только один тип: type a' = A' of int * int;; let extra...
Могут ли все ограничения на данные и состояние быть представлены в виде алгебраических типов данных? Мне нравится, как я часто могу выразить ограничения на систему в виде ADTs. Т. е. все возможные значения АДТ являются возможными состояниями системы, нет места для несогласованности. Всегда ли это так, или ...
Предположим, что я хочу написать крошечный интерпретатор. который может вычислять выражения с помощью двоичной операции Plus, унарная операция Negate и целочисленные константы. В настоящее время меня интересует только интерпретация АСТ, поэтому давайте для простоты пропустим токенизацию и синтаксический ана...
Я пытаюсь понять, почему эти два фрагмента дают разные результаты при так называемом "анализе строгости бедного человека". В первом примере используется data (при условии правильного применения экземпляра): data Parser t a = Parser { getParser :: [t] -> Maybe ([t], a) } > getParser (pu...
У меня есть тип данных: data Stuff s = Stuff { name :: s, idx :: Int } И хотим превратить это в моноид со следующими реализациями: tmappend :: Stuff s -> Stuff t -> Stuff (s,t) tmappend s1 s2 = Stuff (name s1, name s2) (idx s1 + idx s2) tzero :: Stuff () tzero = Stuff () 0 Обратите внимание,...
Я пытался написать небольшой компилятор в течение последних нескольких недель, читая замечательный учебник Стивена Дила "напишу тебе Хаскелла". В настоящее время я пишу интерпретатор, прежде чем писать компилятор. У меня есть проблемы с представлением моих значений, вычисленных из приложения-конструктора алг...
Джон Хьюз в своей знаменитой статье под названием Почему функциональное программирование имеет значение, описывает типы данных для списков и упорядоченных помеченных деревьев , listof * ::= Nil | Cons * (listof *) treeof * ::= Node * (listof (treeof *)) И функция под названием foldtree, foldtree f g ...
как я могу найти фактический объем памяти, необходимый для хранения значения некоторого типа данных в Haskell (в основном с GHC)? Можно ли оценить его во время выполнения (например, в GHCi) или можно оценить требования к памяти составного типа данных из его компонентов? В общем, если требования к памяти типо...