DAS>maximum2 :: (Ord a) => [a] -> a
DAS>maximum2 [] = error "maximum of empty list"
DAS>maximum2 [x] = x
DAS>maximum2 [x:xs]
DAS> | x > maxTail = x
DAS> | otherwise = maxTail
DAS> where maxTail = maximum2 xs
DAS>
DAS>
DAS>Prelude> :load test1.hs
DAS>[1 of 1] Compiling Main ( test1.hs, interpreted )
DAS>test1.hs:90:0:
DAS> Occurs check: cannot construct the infinite type: a = [a]
DAS> When generalising the type(s) for `maximum2'
DAS>Failed, modules loaded: none.
Здравствуйте, DemAS, Вы писали:
DAS>Здравствуйте, lomeo, Вы писали:
L>>Скобки на круглые поменяй.
DAS>А можешь пояснить, почему:
DAS>maximum2 [] DAS>maximum2 [x]
DAS>но:
DAS>maximum2 (x:xs)
Ну можно видеть, что тип у ( следующий a -> [a] -> [a]
Соответственно получается [a]] вместо желаемого [a], на что и ругается компилятор.
А скобки нужны, чтобы обозначить, что это один параметр функции
maximum2 :: (Ord a) => [a] -> a
maximum2 [] = error "maximum of empty list"
maximum2 [x] = x
maximum (x:xs)
| x > maxTail = x
| otherwise = maxTail
where maxTail = maximum2 xs
*Main> maximum2 [1,2,3]
*** Exception: test1.hs82,0)-(83,15): Non-exhaustive patterns in function maximum2