Я следующий код в HaskellИнстанцирование в Haskell
type Year = Int
data MonthData = Jan | Feb | March | Apr | Mar | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec deriving (Eq, Show, Ord)
type Month = (MonthData, Year)
days :: Month -> Int -> Int
days(m, d) = 31
Когда я пытаюсь выполнить его в интерпретатор Hugs, у меня есть следующее сообщение об ошибке:
ERROR Instance of Num (Int -> Int) required for definition of days
Ошибка расположенный на последней строке моего кода, FYI.
Может ли кто-нибудь объяснить мне, почему у меня есть эта ошибка? Я не могу понять, как мой вызов функции не соответствует объявлению моей функции.
Chepner ответил, прежде чем я смог, но просто добавлю немного контекста к его (правильному!) Ответу, если он вам поможет - в Haskell определение функции/приложение выполняется с использованием пробелов, а не скобок и запятых. Это приводит к тому, что многие люди переходят из C-подобных языков - что будет 'x (y, z)' становится 'x y z'. –
Этот вопрос явно исходит из точки зрения обучения Haskell; однако, для тех, кто находит этот вопрос путем поиска и пытается использовать (а не учиться) Haskell, посмотрите на [gregorianMonthLength] (http://hackage.haskell.org/package/time-1.6.0.1/docs/ Data-Time-Calendar.html # v: gregorianMonthLength) из пакета 'time' для этой функции. –