haskell - how to parse a uniprot-file with parsec? -
i newbie haskell, seems powerful language want learn. adopting code chapter in real world haskell on parsec. tried make own version of parsing content of uniprot-file. file consists of records (that starts ">"), , each record consists of lines. code seems close done in example, getting lot of errors - on types. exception among other taking output of readfile (io string) instead of string. appreciate if me understand wrong in approach...
import text.parsercombinators.parsec main:: io() parsesprot :: io string -> either parseerror [[string]] parsesprot input = parse uniprotfile "(unknown)" input uniprotfile = endby record eol record = sepby lines (char '>') lines = many (noneof ",\n") eol = char '\n' main = parsesprot $ readfile "uniprot_sprot.fasta" putstrln "hey"
parsesprot
doesn't need io
in signature.
parsesprot :: string -> either parseerror [[string]] ...
the result of readfile
io string
. can string
binding result of readfile
action new io
action. in do
notation can bind result variable <-
main = filecontents <- readfile "uniprot_sprot.fasta"
the parsesprot
function doesn't return result in io
, can use anywhere. in do
notation tell difference between result bound variable , declaration using different syntax. x <- ...
binds result variable. let x = ...
declares x
whatever on right hand side.
main = filecontents <- readfile "uniprot_sprot.fasta" let parsedcontents = parsesprot filecontents
to test parser doing, might want print
value returned parse
.
main = filecontents <- readfile "uniprot_sprot.fasta" let parsedcontents = parsesprot filecontents print parsedcontents
without do
notation can write
main = readfile "uniprot_sprot.fasta" >>= print . parsesprot
>>=
takes result of first computation , feeds function decide next.
Comments
Post a Comment