diff --git a/typescript/option/src/helpers.ts b/typescript/option/src/helpers.ts
index 2351ffc..bb455ad 100644
--- a/typescript/option/src/helpers.ts
+++ b/typescript/option/src/helpers.ts
@@ -90,6 +90,18 @@ export const withDefault = <T>(_default: T, option: Option<T>) => {
     return match(option, identity, always(_default))
 }
 
-export const flat = <T>(option: Option<Option<T>>) => {
-    return bind(inner => (isSome(inner) ? flat(inner) : inner), option)
+const checkIfOption = <T>(x): x is Option<T> => x[isOption]
+
+export const flat = <T>(option: Option<T>) => {
+    return match(
+        option,
+        inner => {
+            if (checkIfOption(inner)) {
+                return flat(inner)
+            } else {
+                return Some(inner)
+            }
+        },
+        always(None)
+    )
 }