Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

F# dynamic option

Tags:

f#

I need to specify, that my member property will return something like dynamic? in C#. Is possible use dynamic data type in F#?

type Data =
    | Text of string
    | Number of string
    | Date of string
    with

    member x.Value
        with get() : dynamic option = 
            match x with
            | Text(value) ->
                if value.Length > 0 then Some(value) else None
            | Number(value) ->
                let (success, number) = Decimal.TryParse value
                if (success) then Some(number) else None
            | Date(value) ->
                let (success, date) = DateTime.TryParse value
                if (success) then Some(date) else None

This code cannot be compiled, because return type is determined as string option from Text case. Keyword dynamic is unknown in F#. Any ideas?

like image 730
Václav Dajbych Avatar asked Jan 02 '26 07:01

Václav Dajbych


1 Answers

Try to make this datatype:

type ThreeWay = S of string | N of Decimal | D of DateTime

or, use the System.Object type:

open System
type Data =
    | Text of string
    | Number of string
    | Date of string
    with

    member x.Value
        with get() : Object option = 
            match x with
            | Text(value) ->
                if value.Length > 0 then Some(value :> Object) else None
            | Number(value) ->
                let (success, number) = Decimal.TryParse value
                if (success) then Some(number :> Object) else None
            | Date(value) ->
                let (success, date) = DateTime.TryParse value
                if (success) then Some(date :> Object) else None

To get the value:

let d = Number("123")
let v = d.Value
match v with
| Some(x) -> x :?> Decimal // <-- TYPE CAST HERE
like image 88
Ming-Tang Avatar answered Jan 05 '26 22:01

Ming-Tang



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!