Alterando o tipo de retorno de uma função no Haskell?
Existe uma maneira sucinta de alterar o tipo de retorno de uma função?
Considerarpor exemplo comparing
noData.Ord
. Retorna umOrdering
. No entanto, estou interessado apenas em saber se os dois itens são iguais ou não. Então, eu preciso converter o resultadoOrdering
para umBool
.
Uma maneira simples de pensar é:
isEqualOn f x y = if comparing f x y==EQ then True else False
(ouisEqualOn f x y = comparing f x y==EQ
como aqui indicado nos comentários).
Existe uma maneira mais composicional de fazer isso (meio que adaptandocomparing
ou escrevê-lo de maneira inútil) sem ter que escrever tudo? Idealmente, estou procurando por algo que funcione também em funções n-árias.
- Atualização -
Conforme sugerido pelas respostas / comentários, o exemplo específico acima (isEqualOn
) pode ser implementado usando o padrãoon
funciona comoon (==)
. No entanto, minha pergunta é sobre a técnica geral de alterar os tipos de retorno de função de maneira composicional / sem sentido, conforme exemplificado pela abordagem da SEC nos comentários.