From 96efb0c99eb05f3a22ea05079d3e460ff3d5f712 Mon Sep 17 00:00:00 2001 From: Samuele Reghenzi <sam@reghenzi.cloud> Date: Wed, 16 Dec 2020 15:32:47 +0100 Subject: [PATCH] fixed set --- monads/set.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/monads/set.py b/monads/set.py index 11c3e5a..4bb4454 100644 --- a/monads/set.py +++ b/monads/set.py @@ -3,6 +3,7 @@ from functools import reduce from itertools import chain from monads import functor, List from typing import ( + Any, Callable, Iterable, Iterator, @@ -25,9 +26,16 @@ S = TypeVar("S") class Set(Monad[T], Monoidal[set]): @classmethod def pure(cls, value: T) -> Set[T]: - t = set() - t.add(value) - return Set(t) + def unpack(k: T) -> set: + s: set = set() + if isinstance(k, Iterable): + for v in k: + s.union(unpack(v)) + else: + s.add(k) + return s + + return Set(unpack(value)) def bind(self, function: Callable[[T], Set[S]]) -> Set[S]: return reduce(Set.mappend, map(function, self.value), Set.mzero())