Haskell Печать жестко закодированного значения из функции - PullRequest
0 голосов
/ 02 октября 2018

Я начинаю свое первое исследование функционального программирования с Haskell.Я немного борюсь с печатью жестко закодированных значений.Я создал модель, представляющую автомобиль и механизмы, на которые он может ездить.Что я хочу сделать, так это просто распечатать мой код civicNinetyOne, когда я звоню printCar., но при загрузке файла я получаю сообщение об ошибке.Я разместил ошибку ниже, это ошибка отступа, но из того, что я прочитал здесь на LearnYouAHaskell , это объявление функции вызова правильно.Может кто-нибудь указать мне на причину этой проблемы?Спасибо

Ошибка

first_program.hs:10:1: error:
    parse error (possibly incorrect indentation or mismatched brackets)
   |
10 | printCar:: () -> Car    | ^

Код

data Car = Car{
   gears :: [String],
   currentGear :: String,
   brokeGears :: [String],
   shiftStroke:: Strokes
  }  

let civicNinetyOne = Car ["gear1", "gear2", "gear3", "gear4", "gear5"] "gear1" ["gear4"] [("gear1","pull", "gear2"), ("gear2","push", "gear3"), ("gear3","skipShift", "gear5")] 

printCar:: () -> Car
printCar = civicNinetyOne

1 Ответ

0 голосов
/ 02 октября 2018

printCar принимает аргумент, как и любая другая функция;это тип аргумента (), что означает, что есть только одно значение (также записанное ()), которое можно использовать для его вызова.

civicNinetyOne, с другой стороны, это значение с типомCar, а не функция типа () -> Car, поэтому сама не может быть присвоена printCar.

Правильное определение:

printCar :: () -> Car
printCar () = civicNinetyOne

, и оно будет называться

> printCar ()
Car {gears = ["gear1","gear2","gear3","gear4","gear5"], currentGear = "gear1", brokeGears = ["gear4"], shiftStroke = [("gear1","pull","gear"),("gear2","push","gear3"),("gear3","skipShift","gear5")]}   

Для полноты let (как указано в комментариях) является необязательным в последних версиях GHCi и требуется в более старых версиях GHCi, но это запрещено в модуле.(Интерактивный интерпретатор ведет себя примерно как подразумеваемый do блок.)

...