Я реализовал интерфейс С# в F #, который выглядел примерно так:
public interface IThings
{
Stream ThingsInAStream()
}
Моя реализация выглядела примерно так:
type FSharpThings() =
interface IThings with
member this.ThingsInAStream() =
let ms = new MemoryStream()
// add things to stream
ms
Теперь я получаю сообщение:
The expression was expected to have type
Stream
but here has type
MemoryStream
Я не понимаю MemoryStream IS. Поток. Я знаю, что могу использовать его как поток, например:
ms :> Stream
То же самое относится к [|"string"|]
и IEnumerable<string>
, он реализует интерфейс, и я могу явно использовать его, но он не работает автоматически.
Почему это работает?
let things:(IEnumerable<'a> -> 'a) = (fun f -> f.First())
let thing= things([|"";""|])
Это также автоматическое повышение уровня!