Hello everyone.
I have a problem with a assessment.
The problem is with the layout.
I cannot understand what is wrong.
Here is the code
module Main where
import IO
import System
import List
import Maybe
import Char
import Numeric
 
type Word=String
type WordCount=Int
type WordTup=(word,wordCount)
type WordList=[WordTup]
 
main=do args<-getArgs
        textLines<-getText
        switchArgs args textLines
        where
        switchArgs args textLines
          |(isMemberOf "-f" args) && (isMemberOf "-i" args)
                         =printFreq(sortWordCount(parseLcLine textLines))
                        |(isMemberOf "-f" args)
                         =printFreq(sortWordCount (parseLine textLines))
                        |(isMemberOf "-i" args)
                         =printFreq(sortWordCount (parseLcLine textLines))
                        |otherwise
                         =printFreq(sortName (parseLine textLines))
        getText::IO String
        getText=do c<-getChar
                   e<-isEOF
                   if (e)
                then return "" else
                       (do nc<-getText
                           return (:nc))
        parseLine::String->Wordlist
        parseLine line
                  |(line/="")&&(isWantedChar (headline))
                   =fillWordList w(parseLine newLine)
                  |(line/="")&&(not(isWantedChar (headline)))
                   =parseLine(tail line)
 
        isMemberOf::String->[String]->Bool
        isMemberOf arg args
                   =[]/=[a|a<-args,a==arg]
 
        printFreq::WordList->IO()
        printFreq wl=do sequence (map putWordStat wl)
                        where
                        putWordStat(Word,WordCount)->IO()
                        putWordStat(w,wc)
                        do putStr w
                           putSpc (20 (length w) (length(show wc)))
                           putStr (show wc)
                           putSpc 8
                           putStr (showFFloat (Just 2) (fromIntegral (wc) * 100.0/fromIntegral (wLength))"")
                           putChar '%'
                           putChar '\n'
                        return()
                        wlLength-countWords wl;
 
        putSpc::Int->IO()
        putSpc n
               |n>1 do putChar ''
                       putSpc (n-1)
                return()
               |otherwise=putChar ''
 
        countWords:Wordlist->Int
        countWords [ ]
        countWords ((w,wc):wl)=wc+countWords wl
        sortName::WordList->WordList
        sortName [ ] = [ ]
        sortName (wn:ws)=sortName [(w,wc) (w,wc) <-ws,not (isGreater (w,wc)wc)]
                  ++[wn]++sortName[(w,wc)|(w,wc)<-ws, isGreater (w,wc) wn]
                  where
                  isGreater (wl,wcl) (w2,wc2)
                             |ord(head(wl))-ord(head(x2))>0=True
                             |ord(head(wl))-ord(head(x2))<0=False
                             |length wl>l && length w2>l
                              =isGreater(tail(wl),wcl) (tail(w2,wc2)
                             |otherwise = []
                             where
                             w=parseWord line
                             newline=drop (length w) line
        parseLcLine::String->WordList
        parseLcLine line
                    |(line/=””) && (isWantedChar (head line))=fillWordList w (parseLcLine newline)
                    |(line/=””) && (not (isWantedChar (head line)))=parseLcLine (tail line)
                    |otherwise = []
                    where
                    w=map toLower (parseWord line)
                    newline=drop (lenfth w) line
        parseWord::Word->Word
        parseWord w
                  |(w/=””) && (isWantedChar (head w))=(head w): parseWord (tail w))
                  |otherwise = “”
 
        isWantedChar::Char->Bool
        isWantedChar c
                     | (c==’a’|| c==’b’|| c==’c’|| c==’d’|| c==’e’|| c==’f’|| c==’g’|| c==’h’|| c==’i’||  c==’j’|| c==’k’|| c==’l’|| c==’m’|| c==’n’|| c==’o’|| c==’p’|| c==’q’|| c==’r’|| c==’s’|| c==’t’|| c==’u’|| c==’v’|| c==’w’|| c==’x’|| c==’y’|| c==’z’||c==’A’|| c==’B’|| c==’C’|| c==’D’|| c==’E’|| c==’F’|| c==’G’|| c==’H’|| c==’I’||  c==’J’|| c==’K’|| c==’L’|| c==’M’|| c==’N’|| c==’O’|| c==’P’|| c==’Q’|| c==’R’|| c==’S’|| c==’T’|| c==’U’|| c==’V’|| c==’W’|| c==’X’|| c==’Y’|| c==’Z’|| = True)
                     |otherwise = False
       fillWordList::Word->WordList->WordList
       fillWordList w wordlistl
                    |cWord/= [] =cWord++[wordl,wordCountl)|(wordl,wordCountl<-wordListl,wordl/=w]
                    |otherwise = (w,l):wordListl
                    where
                    cWord=[(wordl,(wordCountl-l)) | (wordl,wordCountl)<-wordListl,wordl==w]
                                                  |length w1>1 && length w2==1=True
                                                  |otherwise = False
        sortWordCount::WordList->WordList
        sortWordCount [] = []
        sortWordCount ((wn,wcn):ws=sortWordCount [(w,wc|cw,wc)<-ws,ws<=wvn++
                       [(wn,wcn)]++sortWordCount [(cw,wc)|(w,wc)<-ws,wcs,wcn]