I am trying to create a a class that will store a time series of data – organized by groups, but I had some compile errors so I stripped down to the basics (just a simple instantiation) and still can’t overcome the compile error. I was hoping some one may have seen this issue before. Clas is defined as:
type TimeSeriesQueue<'V, 'K when 'K: comparison> = class
val private m_daysInCache: int
val private m_cache: Map<'K, 'V list ref > ref;
val private m_getKey: ('V -> 'K) ;
private new(getKey) = {
m_cache = ref Map.empty
m_daysInCache = 7 ;
m_getKey = getKey ;
}
end
So that looks OK to me (it may not be, but doesnt have any errors or warnings) – the instantiation gets the error:
type tempRec = {
someKey: string ;
someVal1: int ;
someVal2: int ;
}
let keyFunc r:tempRec = r.someKey
// error occurs on the following line
let q = new TimeSeriesQueue<tempRec, string> keyFunc
This construct is deprecated: The use
of the type syntax ‘int C’ and ‘C
‘ is not permitted here. Consider
adjusting this type to be written in
the form ‘C’
NOTE This may be simple stupidity – I am just getting back from holiday and my brain is still on time zone lag…
The compiler is just saying that you need to enclose parameters of the constructor in parentheses:
There are some other issues though – the constructor needs to be public (otherwise you cannot call it) and the parameter of
keyFuncshould be also in parentheses (otherwise, the compiler will think that the type annotation is for the result of the function):You may also consider using implicit constructor syntax which makes class declarations a lot simpler in F#. Parameters of the constructor automatically become available in the body of the class and you can declare (private) fields simply using
let: