Description
Perhaps related to #92. Apparently ML .NET doesn't work with F# records! Is this perhaps to do with the fact that F# Records use a different naming convention to Classes for backing fields, and the ML .NET Library. If you use records, the library simply can't find the columns and complains of missing columns. If you port from records to classes with mutable properties, it doesn't fail with that error any longer.
However, mutable classes are pretty much non-idiomatic in F# - no one uses them for the sorts of data-bound workloads that you'll see with ML.
Instead of this:
type SentimentData =
{ [<Column(ordinal = "0")>] SentimentText : string
[<Column(ordinal = "1", name = "Label")>] Sentiment : float }
[<CLIMutable>]
type SentimentPrediction =
{ [<ColumnName "PredictedLabel">] Sentiment : bool }
You'll have to use something like this monstrosity.
type SentimentData() =
[<Column(ordinal = "0"); DefaultValue>]
val mutable SentimentText : string
[<Column(ordinal = "1", name = "Label"); DefaultValue>]
val mutable Sentiment : float32
type SentimentPrediction() =
[<ColumnName "PredictedLabel"; DefaultValue>]
val mutable Sentiment : bool
You can't even use the member val
shorthand syntax that F# provides for mutable get / set properties since the ColumnName
attribute doesn't work with them. Plus, you lose all the standard features that Records bring such as lightweight syntax, easy creation, copy-and-update, immutability and structural equality.
I strongly recommend adding support for them by ensuring that whatever internal hydration logic that is currently coupled to classes supports records as well.