- Хотя в сети есть несколько вопросов. Ограничения типов уже не найдены, и я не смогу решить проблему -
Цель: я хочу создать свои собственные типы Vector / Matrix, но так, чтобы реализация не привязывалась к конкретному типу BigRational (или подобному). Все, что я бы предпочел, это стандартные алгебраические операции над такими типами (+ - * /% равенство).
open System
type Foo<'T> (value: 'T) =
member inline __.Value : 'T = value
static member inline Add (a: Foo<'T>) (b: Foo<'T>) =
Foo<'T>(a.Value + b.Value)
module Foo =
let inline Create (v) = Foo(v)
let log (foo: #Foo<_>) =
printfn "Foo: %s" (foo.Value.ToString())
[<EntryPoint>]
let main argv =
Foo.log (Foo.Create("hi ho"))
Foo.log (Foo<int>(31415))
Foo.log (Foo<float>(3.1415))
Foo.log (Foo<int>.Add (Foo.Create(3)) (Foo.Create(4)))
let a = Foo.Create(13)
let b = Foo.Create(3.1415)
Foo.log (Foo<int>.Add (a.Value) (a.Value))
Foo.log (Foo<float>.Add (b.Value) (b.Value))
0 // return an integer exit code
Я не могу заставить этот крошечный пример кода скомпилировать более одного типа, такого как Foo<int>
, а также Foo<float>
. Как я мог сделать это правильно?
Большое спасибо заранее,
Christian.