Dan,

That was very helpful.  When I run your code on a different computer than the 
first one I was working on, I see this:

ghic> input
[Seq (SeqLabel {unSL = "Rosalind_6404"}) (SeqData {unSD = 
"CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG"})
 Nothing,Seq (SeqLabel {unSL = "Rosalind_5959"}) (SeqData {unSD = 
"CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC"})
 Nothing,Seq (SeqLabel {unSL = "Rosalind_0808"}) (SeqData {unSD = 
"CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT"})
 Nothing]
ghic> :t input
input :: [Sequence]

Which is entirely different from what I’m seeing on the other computer (see 
below).  Both are Macs.  As far as I can tell, all versions of the Haskell 
Platform and the modules are the same.

Any ideas?

Ken

> On Oct 20, 2014, at 1:49 PM, Dan Fornika <dforn...@gmail.com> wrote:
> 
> Hi Ken,
> 
> I've also been working on the rosalind.info problem set.  If you'd like to 
> see my answer for this problem, you can see it here:
> 
> https://github.com/dfornika/rosalind/blob/master/04_gc_content/04_gc_content.hs
> 
> If you'd prefer to work through the problem yourself, I can offer some advice 
> to get started.  The internal sequence data in the Sequence type in 
> Bio.Sequence.Fasta is a lazy bytestring.  You can access the sequence data 
> with the 'seqdata' function from Bio.Sequence.Fasta, and convert it to a 
> 'plain old' String with 'toStr'.
> 
> If you need to work with they bytestrings, you can import 
> Data.ByteString.Lazy.Char8. It should be imported 'qualified' so that it 
> doesn't conflict with functions from the Prelude.
> 
> Here is some code. I haven't had a chance to test it, so I apologize for any 
> bugs.
> 
> Dan
> 
> module Main where
> 
> import Bio.Core.Sequence
> import Bio.Sequence.Fasta
> import qualified Data.ByteString.Lazy.Char8 as B  -- not necessary for this 
> example, but this is how you would import the bytestring functions.
> 
> main :: IO()
> main = do
>   input <- readFasta "./input.fasta"
>   let seqs = map (toStr . seqdata) seqs
>   mapM_ putStrLn seqs
> 
> On Mon, Oct 20, 2014 at 9:27 AM, Youens-Clark, Charles Kenneth - (kyclark) 
> <kycl...@email.arizona.edu> wrote:
> I’m currently working my way through the problems at “rosalind.info,” 
> implementing each of my solutions in Perl, Python, and Haskell.  I’m stuck on 
> the “GC” problem (http://rosalind.info/problems/gc/) as I need to parse a 
> FASTA file with "Bio.Sequence.Fasta.”
> 
> In ghci, I can easily do this:
> 
> ghci> let f = readFasta "input.fasta"
> ghci> f
> [ID -----------------------------------------------------------------
> Rosalind_6404
> 
> COMMENT ------------------------------------------------------------
> 
> 
> DATA ---------------------------------------------------------------
>   0 CCTGCGGAAG ATCGGCACTA GAATAGCCAG AACCGTTTCT CTGAGGCTTC CGGCCTTCCC
>  60 TCCCACTAAT AATTCTGAGG,ID 
> -----------------------------------------------------------------
> Rosalind_5959
> 
> COMMENT ------------------------------------------------------------
> 
> 
> DATA ---------------------------------------------------------------
>   0 CCATCGGTAG CGCATCCTTA GTCCAATTAA GTCCCTATCC AGGCGCTCCG CCGAAGGTCT
>  60 ATATCCATTT GTCAGCAGAC ACGC,ID ————————————————————————————————
> …
> 
> So I know it’s working, but I can’t figure out what to do with “f” now.  I 
> can see it’s type:
> 
> ghci> :t f
> f :: IO
>        [Bio.Sequence.SeqData.Sequence Bio.Sequence.SeqData.Unknown]
> 
> But what do I do with “f” to, say, iterate over the sequences and count G/C 
> content, get the length of the sequence, etc.?
> 
> Thanks,
> 
> Ken
> 

Reply via email to