とりあえず3個の要素決めうちバージョン
perm xs = [ [a,b,c] | a<-xs, b<-xs, c<-xs, a/=b, b/=c, c/=a ]
main = print $ perm [1..3]
実行結果
[ [1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] ]
うーん、これをどうやって3個以外の場合に一般化すればいいかがわからん
あ、わかったかも。
perm [] = [ [] ]
perm xs = [ y:ys | y<-xs, ys<-perm[ z | z<-xs, z/=y ] ]