#haskell
Вопрос:
Я определил типы данных ниже:
data Plan a = Empty | Road a a (Plan a) deriving(Eq, Show)
data Town a = Emptytown | Town a deriving(Eq, Show)
town2 :: Town (Int, String)
town2 = Town(1, "H")
town3 :: Town (Int, String)
town3 = Town(2, "S")
Но я не понимаю, почему я получаю следующую ошибку, когда пытаюсь определить Plan2
:
Plan2 :: Plan Town (Int, String)
Plan2 = Road town2 town3 (Empty)``
<interactive>:456:1: error:
Invalid type signature: Plan2 :: ...
Should be of form <variable> :: <type>
Комментарии:
1. Вы не должны использовать заглавную букву P для Plan2, так как это указывает на то, что он является конструктором данных
Ответ №1:
Существует множество проблем:
- Имена переменных должны начинаться со строчной буквы, но
Plan2
начинаться с прописной буквы - В подписи типа для
plan2
вас указаныPlan
два аргумента типа, но ожидается только один. Я думаю, что вы хотите предоставитьTown
один аргумент типа, а затем предоставить его в качестве аргумента типаPlan
plan2 :: Plan (Town (Int, String))
- В конце определения есть две обратные ссылки для
Plan2
. их следует удалить.