anchor.diff:  
       let private parseSOFT (soft: seq<SOFTToken>) =
           let en = soft.GetEnumerator()
  -        let rec loop (token: SOFTToken) (seriesAccession: string) (seriesTitle: string) (seriesDesign: string) (seriesType:string list) (date: string) (publications: string list) (samples: (string*SampleInfos) list) (platform: (string*PlatformInfos) list) = 
  -            if en.MoveNext() then
  -                let nextToken = en.Current
  -                match nextToken with
  -                |Entity (e,v) -> 
  -                    match e with
  -                    //gather Series Info
  -                    | "^SERIES"     ->  loop nextToken (v) seriesTitle seriesDesign seriesType date publications samples platform
  -                    //call sample parser
  -                    | "^SAMPLE"     ->  let token', smplAcc, smpl = parseSample token en v
  -                                        loop (token') seriesAccession seriesTitle seriesDesign seriesType date publications ((smplAcc,smpl)::samples) platform
  -                    //call platform parser
  -                    | "^PLATFORM"   ->  let token', pltfrmlAcc, pltfrm = parsePlatformInfos token en v
  -                                        loop nextToken seriesAccession seriesTitle seriesDesign seriesType date publications samples ((pltfrmlAcc,pltfrm)::platform)
  -                    //ignore unexpected/uninteresting entities
  -                    | _             ->  loop nextToken seriesAccession seriesTitle seriesDesign seriesType date publications samples platform
  -                //Attributes are only found here when on series level or uninteresting
  -                |Attribute (a,v) -> match a with
  -                                    | "!Series_title"                           -> loop nextToken seriesAccession (v) seriesDesign seriesType date publications samples platform
  -                                    | "!Series_submission_date"                 -> loop nextToken seriesAccession seriesTitle seriesDesign seriesType (v) publications samples platform
  -                                    | "!Series_pubmed_id" | "!Series_web_link"  -> loop nextToken seriesAccession seriesTitle seriesDesign seriesType date ((sprintf "%s = %s" a v)::publications) samples platform
  -                                    | "!Series_overall_design"                  -> loop nextToken seriesAccession seriesTitle v seriesType date publications samples platform
  -                                    | "!Series_type"                            -> loop nextToken seriesAccession seriesTitle seriesDesign (v::seriesType) date publications samples platform
  -                                    //attributes of uninteresting entities
  -                                    | _ -> loop nextToken seriesAccession seriesTitle seriesDesign seriesType date publications samples platform
  -                //not interesting
  -                |_ -> loop nextToken seriesAccession seriesTitle seriesDesign seriesType date publications samples platform
  -
  -            else 
  -                createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType date publications (Map.ofList platform) ( Map.ofList samples)
  +
  +        let rec loop (token: SOFTToken) (seriesAccession: string) (seriesTitle: string) (seriesDesign: string) (seriesType:string list) (seriesSamples:string list) (date: string) (publications: string list) (samples: (string*SampleInfos) list) (platform: (string*PlatformInfos) list) = 
  +
  +            match token with
  +            |Entity (e,v) -> 
  +                match e with
  +                //gather Series Info
  +                | "^SERIES"     ->  
  +                    if en.MoveNext() then
  +                        let nextToken = en.Current
  +                        loop nextToken (v) seriesTitle seriesDesign seriesType seriesSamples date publications samples platform
  +                    else 
  +                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +                //call sample parser
  +                | "^SAMPLE"     ->  //printfn "SAMPLE??? %s" v
  +                                    let token', smplAcc, smpl = parseSample token en v
  +                                    loop (token') seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications ((smplAcc,smpl)::samples) platform
  +                //call platform parser
  +                | "^PLATFORM"   ->  let token', pltfrmlAcc, pltfrm = parsePlatformInfos token en v
  +                                    loop (token') seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications samples ((pltfrmlAcc,pltfrm)::platform)
  +                //ignore unexpected/uninteresting entities
  +                | _             ->  
  +                    if en.MoveNext() then
  +                        let nextToken = en.Current
  +                        loop nextToken seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications samples platform
  +                    else 
  +                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +            //Attributes are only found here when on series level or uninteresting
  +            |Attribute (a,v) -> match a with
  +                                | "!Series_title"                           -> 
  +                                    if en.MoveNext() then
  +                                        let nextToken = en.Current
  +                                        loop nextToken seriesAccession (v) seriesDesign seriesType seriesSamples date publications samples platform
  +                                    else 
  +                                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +                                | "!Series_submission_date"                 -> 
  +                                    if en.MoveNext() then
  +                                        let nextToken = en.Current
  +                                        loop nextToken seriesAccession seriesTitle seriesDesign seriesType seriesSamples (v) publications samples platform
  +                                    else 
  +                                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +                                | "!Series_pubmed_id" | "!Series_web_link"  -> 
  +                                    if en.MoveNext() then
  +                                        let nextToken = en.Current
  +                                        loop nextToken seriesAccession seriesTitle seriesDesign seriesType seriesSamples date ((sprintf "%s = %s" a v)::publications) samples platform
  +                                    else 
  +                                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +                                | "!Series_overall_design"                  -> 
  +                                    if en.MoveNext() then
  +                                        let nextToken = en.Current
  +                                        loop nextToken seriesAccession seriesTitle v seriesType seriesSamples date publications samples platform
  +                                    else 
  +                                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +                                | "!Series_type"                            -> 
  +                                    if en.MoveNext() then
  +                                        let nextToken = en.Current
  +                                        loop nextToken seriesAccession seriesTitle seriesDesign (v::seriesType) seriesSamples date publications samples platform
  +                                    else 
  +                                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +                                | "!Series_sample_id"                       -> 
  +                                    if en.MoveNext() then
  +                                        let nextToken = en.Current
  +                                        loop nextToken seriesAccession seriesTitle seriesDesign seriesType (v::seriesSamples) date  publications samples platform
  +                                    else 
  +                                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +                                //attributes of uninteresting entities
  +                                | _ -> 
  +                                    if en.MoveNext() then
  +                                        let nextToken = en.Current
  +                                        loop nextToken seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications samples platform
  +                                    else 
  +                                        createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +            //not interesting
  +            |_ -> 
  +                if en.MoveNext() then
  +                    let nextToken = en.Current
  +                    loop nextToken seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications samples platform
  +                else 
  +                    createSeriesInfo seriesAccession seriesTitle seriesDesign seriesType seriesSamples date publications (Map.ofList platform) ( Map.ofList samples)
  +
           if en.MoveNext() then
  -            loop en.Current "" "" "" [] "" [] [] []
  +            loop en.Current "" "" "" [] [] "" [] [] []
           else failwith "empty input"
   
       ///Read SOFT SeriesInfo from a SOFT series file
  
positive.code:             SRAAccession    = sra
          }
  
      ///Type Representation of SOFT `^Series` Entities
      type SeriesInfos = {
          Accession       : string
          Title           : string
          Design          : string
          Type            : string list
          Date            : string
          Publications    : string list
          Platform        : Map<string,PlatformInfos>
          Samples         : Map<string,SampleInfos>
      }
  
      let private createSeriesInfo acc t des typ d pub pI sI =
          {
              Accession = acc
              Title = t
              Design = des
              Type = typ
              Date = d
              Publications = pub
              Platform = pI
              Samples = sI
          }
  
      type private SOFTToken =
      |Entity of (string * string)
      |Attribute of (string * string)
      |DataTable
  
negative.code: 
      let private createPlatformInfos acc name org = {Accession = acc; Name = name; Organism= org}
  
      type SampleInfos = {
          Accession: string
          Title : string
          Channels: int
          Organism: Map<string,string list>
          Source:Map<string,string list>
          Characteristics: Map<string,string list>
          Molecules: Map<string,string list>
          SRAAccession: string
      }
  
      let private createSampleInfos acc t ch org src char mol sra = 
  