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
блок.)