Как написать сигнатуру типа функции в Haskell

#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 . это самый общий тип для нее.