Я пытаюсь внедрить сортировку вставки в haskell для моего еженедельного университетского задания. Это моя вставка и вид функции:Insertionsort в Haskell с заданным заказом
insert :: (Ord a) => a -> [a] -> [a]
insert a [] = [a]
insert a (a':as)
| a <= a' = a:a':as
| otherwise = a':insert a as
insertionSort :: (Ord a) => [a] -> [a]
insertionSort [] = []
insertionSort (a:as) = insert a (insertionSort as)
Это работает, но мой учитель указан подпись так:
insert :: (a -> a -> Bool) -> a -> [a] -> [a]
insertionSort :: (a -> a -> Bool) -> [a] -> [a]
Все я пытался теперь не удалось, и ошибки компилятора не очень полезно либо. Надеюсь, вы, ребята, можете мне помочь!
Edit:
Данный пример моего наставника выглядит так:
Main> insert (<) 3 [1,2,5,7,9]
[1,2,3,5,7,9]
Main> insSort (>) [7,9,1,2,5]
[9,7,5,2,1]
Большое спасибо! Я читал, что (Ord a), (>) и (a-> a-> Bool) эквивалентны. Это верно? И если да, зачем вам (insert :: (Ord a) => (a-> a-> Bool) -> a ...) вместо (insert :: (a-> a-> Bool) - > а ...)? – GabbaGandalf
@GabbaGandalf Ни один из них не эквивалентен. '(Ord a) => ...' заявляет, что a должен быть упорядоченным типом данных. '(>)' является функцией. Это то же самое, что писать '(\ a b -> a> b)'. Наконец '(a -> a -> Bool)' является описанием типа: он описывает функцию, которая принимает 2 значения типа 'a' и возвращает' Bool'. –
Спасибо, приятно знать. Итак, утверждение (Ord a) => ... просто предотвращает ошибки во время выполнения? – GabbaGandalf