Как указать, что две переменные типа одинаковы?

Произнесите такой код:

fun :: (a -> b) -> [a] -> [b]
fun f as = someLogic as
  where someLogic :: [a] -> [b]
        someLogic xs = map f xs

Последняя строка будет жаловаться компилятору, что тип a для "f" не совпадает с типом a для "someLogic".

Итак, что я мог сделать, чтобы сообщить компилятору, что оба типа a - это одно и то же?


person Magicloud    schedule 14.04.2019    source источник
comment
ScopedTypeVariables - это то, что нужно Google. Я вернусь и добавлю правильный ответ, когда я не буду разговаривать по телефону, если к тому времени кто-то еще не ответил.   -  person Ben    schedule 14.04.2019
comment
или вы можете просто опустить подпись типа someLogic :: [a] -> [b], если она вам действительно не нужна. и в этом простом коде он вам не нужен.   -  person Will Ness    schedule 14.04.2019
comment
@WillNess, да, это один из способов. Но у меня есть все предупреждения, так что меня это будет раздражать.   -  person Magicloud    schedule 14.04.2019