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())