- [High]
make.ps1fails sometimes for weird reasons (most of the time it works perfectly). There seems to be a problem with the new MSBuild when we have VS opened and it is running at the same time:
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(
3245,5): error MSB3491: Impossible d'écrire des lignes dans le fichier "I:\github\Narvalo.NET\work\obj\Debug\CoreCompil
eInputs.cache". Le processus ne peut pas accéder au fichier 'I:\github\Narvalo.NET\work\obj\Debug\CoreCompileInputs.cac
he', car il est en cours d'utilisation par un autre processus. [I:\github\Narvalo.NET\tests\Narvalo.Fx.Facts\Narvalo.Fx
.Facts.csproj]
See dotnet issue?
- Resources for Narvalo.Money get mixed up when using
make.ps1 pack: it embedsStrings.resxfrom Narvalo.Fx????!!!! Really disturbing. Current fix: renameStrings.resxtoStrings_Money.resx. - Review localization for Narvalo.Build, Narvalo.Mvp, Narvalo.Mvp.Web and Narvalo.Web.
make.ps1: Add filter to test only one Trait.- [Low] Automatically create the assembly infos from the NuGet spec.
- [Low] Update CodeFormatter when it supports C# 7.0. After that, change
from
format-code.cmdtoformat-code.ps1. - [Low] Add a "dry run" option to NuGetAgent.
- [Low] Enable CI (Travis, AppVeyor, Coverall, Readthedoc, GitLink)?
- Pending: support for Code Analysis (I really want this).
- We might have a conflict between the new MSBuild and our target
Package. - Use
PackageReferenceinstead of parsingpackages.config. - Update to use the (new) native package properties:
Version,AssemblyVersion,FileVersion... instead of_AssemblyVersion,_AssemblyInformationalVersionand_AssemblyFileVersion.
Next:
- Make it a .NET Standard 2.0 library.
- Implement BBAN validation. Since this must be done per country, a good start would be to provide a general API + an implementation a selected number of countries.
Next:
- Internet International Bank Account Number
- BBAN and IBAN implementations:
- Error types: implicit conversion from
T(could simplify object creation)? explicit conversion tobool(this one might be a bad idea whenTisboolbut, if we follow the guidelines, we never create such types)? - Add guidelines.
- Add a note concerning the size of the structs.
- T4: If the monad is nullable, check that we handle all null's. Auto-generate
tests for null-guards. Affects only
Either<T1, T2><- we should check that the behaviour in Either.Shadowing is the same as in the auto-generated file (it is already not the case forSelectMany; correct this). - Could we simplify LINQ for
Maybe<T?>?
Next:
- LINQ:
FoldBackandReduceBack. Mimic Rx operators:Scan,MinBy,MaxBy...? (see also F#) I am sure we can improve the default implementations forCollectAny,SelectAnyandWhereAny. - Enhance existing types:
- More recursion helpers: trampoline + other Y Combinators.
- Add tests for purity?
- Add async and lazy alternatives?
- More Haskell API,
When,Forever& co? See experiments in Narvalo.T4. - Enable
GroupJoinfor monads? Do not forget to enable it inEmitMonadGuardstoo and Maybe.Shadowing. - Add operators on the right for
Either<T1, T2>andResult<T, TError>? - Add more monad-like ops to
OutcomeandFallible. - Custom
isoperators (it is in the proposal but it is not yet possible). - Add
IComparabletoUnit?
- Open questions:
- Deconstruction for
Maybe<T?>,
- Deconstruction for
public static void Deconstruct<T>(
this Maybe<T?> @this,
out bool isSome,
out T value)
where T : struct
{
isSome = @this.IsSome;
value = @this.IsSome ? @this.Value.Value : default(T);
}this is perfectly legal but will always be ignored in favor of the
deconstructor method in `Maybe<T?>`.
- For
IStructuralEquatable.Equalswhe throw when the comparer is null, is it the correct behaviour?
- Add
Monoidand other monads (IO,Reader,Writer,Continuation,State) - prototypes here- Idioms
- Check out FSharp.Extras
- Protect
Multiply,DivideandRemainderagainst absurd results when rounding. DecimalRounding.Scale(), check for minimal value?
Next:
- Review the formatting stuff + enhance.
- Parsing.
- Add
DitheredRoundingAdjuster. - Bias allocation: First, Last, Lowest, Highest, Pseudorandom.
- Distribution: PseudoUniform, Single, Evenly, Spread.
- Inspirations:
- JodaMoney
- NodaMoney
- Money Type for the CLR
- CSharpMoney
- NMoneys
- Review
ThrowIfNoPresenterBound,Loadevent,PresenterBinder.Release.
Next:
- Could it be a .NET Standard library?
- Application Controller and Navigator.
- Review the use of custom presenter types per platform prevents the reuse of presenters across different platforms. Maybe is it a necessary evil?
- Add support for EventAggregator (not the same as cross-presenter communication).
- Incorporate ideas from MVCSharp (Task) and maybe GWT, Caliburn.Micro, ReactiveUI or MVVM Light? See here and here
Notes for the other repository.
- Use a common MSBuild configuration for .NET Standard and .NET Core.
- Use the
dotnetcommand-line. - Sync Autofac helpers & Release class w/ Quaderno.
- Do we really need GC.SuppressFinalize(this).
- Reboot Narvalo.Tap and Narvalo.Ghostscript?
- CLDR
- INSEE COG
- JSON Path
- Finish monad rules.
- Add demo codes for all monads.
- Add Writer and Continuation monads.
- Give examples: parser combinator (Sprache), state-machine (Stateless).
References:
- Cross-presenter communication in WinForms is not functional.
Things to work on before it might prove to be useful:
- Right now, only controls contained in a MvpForm share the same presenter binder.
We need something similar to what is done with ASP.NET (
PageHost) but the situation is a bit more complicated due to the different execution model. Controls are fully loaded before we reach theCreateControlorLoadevents in the form container where we normally perform the binding. - The message coordinator must support unsubscription (automatic or manual).
- Right now, only controls contained in a MvpForm share the same presenter binder.
We need something similar to what is done with ASP.NET (