Déterminer si un nombre donné est premier en haskell

J'ai donc imaginé la fonction suivante pour voir si un nombre donné est premier en Haskell (il suppose que la première prime est de 2):

isPrime k = length [ x | x <- [2..k], k `mod` x == 0)] == 1

il a, de toute évidence piège de la poursuite de l'évaluation, même si elle est divisible par plusieurs numéros :(. Est-il sane façon de "couper" l'évaluation lorsqu'il trouve plus d'une solution, en utilisant la liste des compréhensions?

Aussi, d'autres implémentations voulez-vous vous essayer? Je ne suis pas à la recherche de la performance ici, j'essaie juste de voir si il y a d'autres plus "haskellish" façons de faire la même chose.

OriginalL'auteur devoured elysium | 2011-01-14