Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merge stable fp/meta refactoring #10

Merged
merged 86 commits into from
May 11, 2024
Merged

Merge stable fp/meta refactoring #10

merged 86 commits into from
May 11, 2024

Conversation

opeltre
Copy link
Owner

@opeltre opeltre commented May 11, 2024

The overall metaclass logic and naming from fp/meta is cleaned up, becoming quite different from 0.1

The Type category implementation has been moved to fp/cartesian, implementing Hom, Prod and Either.

TODO:

  • extend field descriptors of Struct instances to have setters
  • stabilise and harmonise lifting logic
  • stabilise Tensor and Tens implementations for the backend agnostic type.

opeltre added 30 commits May 11, 2024 14:09
`MetaClass.method` then becomes a decorator to register a
particular method's implementation (could allow for != names).
This commit adds the `Method` descriptor for type classes,
which allows meta classes inheriting from `TypeClass` to
register method signatures, to then check/decorate specific
method implementations of their type instances.

:%s/TypeMeta/TypeClass
:%s/Meta/Class
:%s/TypeVar/Variable
:%s/TypeConstructor/Constructor
Temporarily remove Tensor from exports,
make this a subpackage with backend interface.
Use Hom as bifunctor name for callables.
Keep arrows for abstract compositions.
Functors (List, Wrap, ...) and type classes (Eq, Monoid, Ring, ...)
are subclasses of Type, as should be.

Differently constrained type constructors (Functor, Monad, ...)
all subclass Kind.

    List(Int) :: List <= Monoid <= Type

    Type :: Kind
    List :: Functor <= Kind
The default Constructor._new_ method supports subclass declarations
as in:

    class Tensor(WrapRing(torch.Tensor), metaclass=WrapRing):
        ...
Constructor instances seamlessly return type expressions when
fed with type variables

:%s/Variable/Var/g
opeltre added 22 commits May 11, 2024 14:09
update State docs and examples
This commit makes `NFunctor` useless.
Both `Bifunctor` and `Cofunctor` could be forced
to inherit from `Functor`. However two problems remain:

- correct varargs signature for bifunctors
- delete (co)fmap method when co(ntra)variant are exhausted
add Monoidal aka Applicative functors, superclass of Monad
compute Functor kind from `tuple[Args, Args]` signature where

    Args = tuple[int] | ...

This way the NFunctor class becomes useless.
Keeps Cofunctor and Bifunctor to keep `cofmap` optional, although
using Functor as base for contravariant functors as well could be done later,
up to a slight API change.
@opeltre opeltre merged commit a4efb33 into master May 11, 2024
1 check passed
@opeltre opeltre mentioned this pull request May 11, 2024
Closed
@opeltre opeltre deleted the meta branch May 11, 2024 23:26
@opeltre opeltre mentioned this pull request May 12, 2024
Closed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant