How to extract data from F# list

Posted by David White on Stack Overflow See other posts from Stack Overflow or by David White
Published on 2011-01-16T10:38:22Z Indexed on 2011/01/16 11:53 UTC
Read the original article Hit count: 208

Filed under:
|

Following up my previous question, I'm slowly getting the hang of FParsec (though I do find it particularly hard to grok).

My next newbie F# question is, how do I extract data from the list the parser creates?

For example, I loaded the sample code from the previous question into a module called Parser.fs, and added a very simple unit test in a separate module (with the appropriate references). I'm using XUnit:

open Xunit

[<Fact>]
let Parse_1_ShouldReturnListContaining1 () =
    let interim = Parser.parse("1")
    Assert.False(List.isEmpty(interim))

    let head = interim.Head // I realise that I have only one item in the list this time
    Assert.Equal("1", ???) 

Interactively, when I execute parse "1" the response is:

val it : Element list = [Number "1"]

and by tweaking the list of valid operators, I can run parse "1+1" to get:

val it : Element list = [Number "1"; Operator "+"; Number "1"]

What do I need to put in place of my ??? in the snippet above? And how do I check that it is a Number, rather than an Operator, etc.?

© Stack Overflow or respective owner

Related posts about F#

Related posts about fparsec