Finding the next higher digital permutation of a number
First of all: your code is very readable and you seem to know your way around standard library functions, which is very important is Haskell. Good job!

A couple of suggestions:


A simpler isSortedDesc:

import Data.List.Ordered (isSortedBy)

isSortedDesc :: (Ord a) =&gt; [a] -&gt; Bool
isSortedDesc = isSortedBy (&gt;=)


Edit: Sorry, isSortedBy is not a standard function - it belongs to data-ordlist-0.2. I'd implement it in a straightforward recursive manner:

isSortedDesc :: (Ord a) =&gt; [a] -&gt; Bool
isSortedDesc (x:y:xs') = x&gt;=y &amp;&amp; isSortedDesc (y:xs')
isSortedDesc _ = True

foldFun:

In foldFun, try to make the arguments more understandable. You can add a type signature, name the arguments or add a comment. For example, what is the purpose of the boolean argument?

Another thing: nextHigherPermutation has two execution steps - find a digit we can swap, and then just copy the rest of the string. Personally I'm not a fun of the idea of passing extra information to fold (the boolean argument) and then discarding it. Instead, consider splitting it to two seperate functions - for example, one that finds the swap digit and another that performs the swap.