See the version list below for details.
dotnet add package Covarsky --version 1.2.0
NuGet\Install-Package Covarsky -Version 1.2.0
<PackageReference Include="Covarsky" Version="1.2.0"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets> </PackageReference>
paket add Covarsky --version 1.2.0
#r "nuget: Covarsky, 1.2.0"
// Install Covarsky as a Cake Addin #addin nuget:?package=Covarsky&version=1.2.0 // Install Covarsky as a Cake Tool #tool nuget:?package=Covarsky&version=1.2.0
Covarsky is a tool that brings co(ntra)variant types to F# (or any other language that does not support them). It runs an MSBuild task that modifies assemblies after compilation.
How to install
CovarskyNuGet package to your project.
Create a new source file with two attributes like that (F# example shown):
namespace global open System [<AttributeUsage(AttributeTargets.GenericParameter)>] type internal CovariantOutAttribute() = inherit Attribute() [<AttributeUsage(AttributeTargets.GenericParameter)>] type internal ContravariantInAttribute() = inherit Attribute()
Warning: The attributes must be declared in the global namespace, and must be internal.
- Add the following line inside a
PropertyGroupin your project file:
- You are good to go! Let's see an example.
type MyType<[<CovariantOut>] 'T> = abstract GetObject: unit -> 'T // [...] let cast (x: MyType<string>): MyType<obj> = unbox x
These two attributes will be ignored if used anywhere but in the generic parameters of an interface or a delegate.
Using these two attributes in a generic parameter that is already co(ntra)variant will raise a warning but will be ignored as well.
Using both attributes on the same time will raise an error and fail the build (unless something above hasn't already happened).
DISCLAIMER: Using the attributes in any other wrong way (such as a contravariant interface with a method that returns the generic type) will not be checked by Covarsky and may break your assembly.
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
This package is not used by any NuGet packages.
This package is not used by any popular GitHub repositories.
Covarsky is functional again.