Caesar-Cipher Implementation
I'd start by avoiding directly encoding ASCII character codes into the logic. For example, instead of:

if ord char &gt; 64 &amp;&amp; ord char &lt; 91


I'd probably use:

if char &gt;= 'A' &amp;&amp; char &lt;= 'Z'


I think this shows the intent enough more clearly to be worthwhile.
Given that you also do this a couple of different places, I'd probably write a small isUpper function to return a Bool indicating whether a character is an upper-case letter:

isUpper :: Char -&gt; Bool
isUpper char = char &gt;= 'A' &amp;&amp; char &lt;= 'Z'


Then the rest of the code can use that:

encryptChar char shift = if isUpper char     -- ...

decryptChar char shift = if isUpper char     -- ...



[Note: the standard library already has an isUpper, but it may not fit your needs, since it's Unicode-aware, and here you apparently only want to deal with English letters.]