Fsharp: Units of Measure applied to literal bindings are ignored

Created on 2 Jun 2019  路  2Comments  路  Source: dotnet/fsharp

Instances of literal bindings assigned units of measure compile, but don't carry the measure.

Code to reproduce

type [<Measure>] rad
[<Literal>]
let pi = 3.14
let a = pi<rad>
let f (a:float<rad>) = a
f a

Expected behavior

Either an error on the assignment of a, or for f to accept pi

Actual behavior

Error   FS0001  This expression was expected to have type
    'float<rad>'    
but here has type
    'float' F#

Known workarounds

let a = pi*1.<rad>

Related information

  • Windows 10
  • FSI 10.4.0 for F# 4.6
  • Visual Studio 2019
Area-Compiler Severity-Medium bug

All 2 comments

Yes the <rad> annotation in pi<rad> is being ignored when it should give an error

OR: @dsyme we could allow this, after all it makes sense to allow literal bindings to be augmented as measures just like literal values. Could add it here: https://github.com/fsharp/fslang-design/issues/496

Was this page helpful?
0 / 5 - 0 ratings