Miranda Error не может объединить [[char]] с [char] в строке 12 - PullRequest
5 голосов
/ 03 октября 2011

проблемы с кодированием с помощью miranda - я новичок в функциональном программировании, так что ударь меня, если я не ошибаюсь, поэтому я учусь

В любом случае, в строке 12 появляется ошибка, связанная с проблемой unifyin char с char. Моя идея - проверить, написано ли что-то правильно, отфильтровав его по словарю, который будет одновременно списком слов и другим списком из файла сложено вместе

это моя строка 12

= [filter (= typed) ((read file) ++ dictionary)]

и это остальная часть моей программы до сих пор

filename == [char]
word  == [ char ]
dictionary :: [ word ]



spell:: filename -> filename -> [ char ]
look:: word -> filename ->[[[ char ]]]


look typed file
= [filter (= typed) ((read file) ++ dictionary)]

dictionary =
["aardvark","bell","camp","dictionary","editor","file","ground",
"grounds","help","intelligent","joint","kettle","light","memory",
"nettle","orange","quite","research","standard","terminal",
"umbrella","violin","water","xenon","yellow","zoo","aaa","abb",
"acc","add","aee"]

Так кто-нибудь может указать, где я ошибся?

1 Ответ

4 голосов
/ 03 октября 2011

Я никогда не использовал Miranda, но, используя Haskell, похоже, проблема в том, что вы пытаетесь добавить строку и список строк;однако, я предполагаю, что ++ нужны два списка одного типа (как в Haskell):

(++) :: [a] -> [a] -> [a]

Но read file имеет тип [char], а словарь имеет тип [[char]].

Попытка подставить их в сигнатуру типа для ++ вызывает ошибку типа:

(++) :: [char] -> [[char]] -> ?? -- type error!!

Возможно, вы хотите разбить (read file) на слова, прежде чем добавить его к dictionary,Тогда вы добавляете [[char]] к [[char]], что будет отлично работать.

Примечание Я ничего не знаю о Миранде - этот ответ основан на взгляде на вашкод, сообщение об ошибке, которое вы дали, и мой опыт работы с Haskell (где я сделал кучу подобных ошибок).

...