#function #haskell #types #type-signature
#функция #haskell #типы #тип-сигнатура
Вопрос:
Как мне написать сигнатуру типа этой функции в Haskell?
isEarlier (a, b) (x, y) = (a * 60 b) < (x * 60 y)
Он решает, является ли дата более ранней, чем другая, и выводит True / False.
Комментарии:
1. Если вы действительно понятия не имеете, вы можете попробовать ввести свою функцию в GHCi и запросить тип, который GHC выводит для нее. (Путем ввода
:type isEarlier
.) Но мне любопытно, почему вы понятия не имеете об этом? Как вы думаете, каким будет тип?2. он не «распечатывает», он возвращает логический результат. если вы попробуете это в командной строке интерпретатора, он (обычно) выводит возвращаемое значение, но эта печать выполняется интерпретатором .
Ответ №1:
isEarlier :: (Int, Int) -> (Int, Int) -> Bool
Комментарии:
1. Ответы только для кода — это ответы низкого качества.
2. это одна из возможностей. другой есть
isEarlier :: (Integer, Integer) -> (Integer, Integer) -> Bool
, еще один естьisEarlier :: (Float, Float) -> (Float, Float) -> Bool
. если мы попробуемGHCi> :t let isEarlier (a, b) (x, y) = (a * 60 b) < (x * 60 y) in isEarlier
, он скажетisEarlier :: (Ord a, Num a) => (a, a) -> (a, a) -> Bool
. это самый общий тип для нее.