Бессмысленная функция в Хаскеле

Как определить это без очков?

let argmax m = (fst.(maximumBy (comparing snd)).(zip [0..])) m

который работает как ожидалось. Наиболее логичным кажется просто отбросить m как это:

let argmax = (fst.(maximumBy (comparing snd)).(zip [0..]))

Работает для определения в ghci, но вызывает его с argmax [1,3,4,5,6,1] дает мне

<interactive>:103:9:
    No instance for (Num ())
      arising from the literal `1'
    Possible fix: add an instance declaration for (Num ())
    In the expression: 1
    In the first argument of `argmax', namely `[1, 3, 4, 5, ....]'
    In the expression: argmax [1, 3, 4, 5, ....]

Я думаю, что это связано с типами:

:t (fst.(maximumBy (comparing snd)).(zip [0..]))
:: (Enum c, Num c, Ord a) => [a] -> c

для точечной версии:

argmax :: (Enum c, Num c, Ord a) => [a] -> c

для бессмысленной версии:

argmax :: [()] -> Integer

Это жуткий привидение или я что-то не так делаю?

0 ответов

Другие вопросы по тегам