diff --git a/CHANGES.md b/CHANGES.md
index 1dddab9..abd709b 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -8,6 +8,7 @@
 - [THRIFT-4981](https://issues.apache.org/jira/browse/THRIFT-4981) - Remove deprecated netcore bindings from the code base
 - [THRIFT-5006](https://issues.apache.org/jira/browse/THRIFT-5006) - Implement DEFAULT_MAX_LENGTH at TFramedTransport
 - [THRIFT-5069](https://issues.apache.org/jira/browse/THRIFT-5069) - In Go library TDeserializer.Transport is now typed \*TMemoryBuffer instead of TTransport
+- [THRIFT-5072](https://issues.apache.org/jira/browse/THRIFT-5072) - Haskell generator fails to distinguish between multiple enum types with conflicting enum identifiers
 
 ### Java
 
diff --git a/compiler/cpp/src/thrift/generate/t_hs_generator.cc b/compiler/cpp/src/thrift/generate/t_hs_generator.cc
index a59dee5..00c01a1 100644
--- a/compiler/cpp/src/thrift/generate/t_hs_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_hs_generator.cc
@@ -305,7 +305,7 @@
 
   bool first = true;
   for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
-    string name = capitalize((*c_iter)->get_name());
+    string name = capitalize(tenum->get_name()) + "_" + capitalize((*c_iter)->get_name());
     f_types_ << (first ? "" : "|");
     f_types_ << name;
     first = false;
@@ -321,7 +321,7 @@
   indent_up();
   for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
     int value = (*c_iter)->get_value();
-    string name = capitalize((*c_iter)->get_name());
+    string name = capitalize(tenum->get_name()) + "_" + capitalize((*c_iter)->get_name());
     indent(f_types_) << name << " -> " << value << endl;
   }
   indent_down();
@@ -329,7 +329,7 @@
   indent_up();
   for (c_iter = constants.begin(); c_iter != constants.end(); ++c_iter) {
     int value = (*c_iter)->get_value();
-    string name = capitalize((*c_iter)->get_name());
+    string name = capitalize(tenum->get_name()) + "_" + capitalize((*c_iter)->get_name());
     indent(f_types_) << value << " -> " << name << endl;
   }
   indent(f_types_) << "_ -> X.throw T.ThriftException" << endl;
diff --git a/test/hs/TestClient.hs b/test/hs/TestClient.hs
index 93fb591..d014e08 100644
--- a/test/hs/TestClient.hs
+++ b/test/hs/TestClient.hs
@@ -193,16 +193,16 @@
 
   -- Enum Test
   putStrLn "testEnum"
-  numz1 <- Client.testEnum prot ONE
-  when (numz1 /= ONE) exitFailure
+  numz1 <- Client.testEnum prot Numberz_ONE
+  when (numz1 /= Numberz_ONE) exitFailure
 
   putStrLn "testEnum"
-  numz2 <- Client.testEnum prot TWO
-  when (numz2 /= TWO) exitFailure
+  numz2 <- Client.testEnum prot Numberz_TWO
+  when (numz2 /= Numberz_TWO) exitFailure
 
   putStrLn "testEnum"
-  numz5 <- Client.testEnum prot FIVE
-  when (numz5 /= FIVE) exitFailure
+  numz5 <- Client.testEnum prot Numberz_FIVE
+  when (numz5 /= Numberz_FIVE) exitFailure
 
   -- Typedef Test
   putStrLn "testTypedef"
diff --git a/test/hs/TestServer.hs b/test/hs/TestServer.hs
index b7731ab..c37dda3 100644
--- a/test/hs/TestServer.hs
+++ b/test/hs/TestServer.hs
@@ -212,10 +212,10 @@
 
   testInsanity _ x = do
     System.IO.putStrLn "testInsanity()"
-    return $ Map.fromList [ (1, Map.fromList [ (TWO  , x)
-                                             , (THREE, x)
+    return $ Map.fromList [ (1, Map.fromList [ (Numberz_TWO  , x)
+                                             , (Numberz_THREE, x)
                                              ])
-                          , (2, Map.fromList [ (SIX, default_Insanity)
+                          , (2, Map.fromList [ (Numberz_SIX, default_Insanity)
                                              ])
                           ]
 
diff --git a/test/hs/ThriftTest_Main.hs b/test/hs/ThriftTest_Main.hs
index 670023e..6421c6a 100644
--- a/test/hs/ThriftTest_Main.hs
+++ b/test/hs/ThriftTest_Main.hs
@@ -107,7 +107,7 @@
         return (Map.fromList [(1, Map.fromList [(2, 2)])])
 
     testInsanity _ x = do
-        return (Map.fromList [(1, Map.fromList [(Types.ONE, x)])])
+        return (Map.fromList [(1, Map.fromList [(Types.Numberz_ONE, x)])])
 
     testMulti _ _ _ _ _ _ _ = do
         return (Types.Xtruct "" 0 0 0)
diff --git a/tutorial/hs/HaskellClient.hs b/tutorial/hs/HaskellClient.hs
index bd29df0..76a8824 100644
--- a/tutorial/hs/HaskellClient.hs
+++ b/tutorial/hs/HaskellClient.hs
@@ -48,7 +48,7 @@
   printf "1+1=%d\n" sum
 
 
-  let work = Work { work_op = DIVIDE,
+  let work = Work { work_op = Operation_DIVIDE,
                     work_num1 = 1,
                     work_num2 = 0,
                     work_comment = Nothing
@@ -58,7 +58,7 @@
         (\e -> printf "InvalidOperation %s\n" (show (e :: InvalidOperation)))
 
 
-  let work = Work { work_op = SUBTRACT,
+  let work = Work { work_op = Operation_SUBTRACT,
                     work_num1 = 15,
                     work_num2 = 10,
                     work_comment = Nothing
diff --git a/tutorial/hs/HaskellServer.hs b/tutorial/hs/HaskellServer.hs
index cfe1344..1594ee3 100644
--- a/tutorial/hs/HaskellServer.hs
+++ b/tutorial/hs/HaskellServer.hs
@@ -64,13 +64,13 @@
     printf "calculate(%d, %s)\n" logid (show work)
 
     let val = case op work of
-                ADD ->
+                Operation_ADD ->
                     num1 work + num2 work
-                SUBTRACT ->
+                Operation_SUBTRACT ->
                     num1 work - num2 work
-                MULTIPLY ->
+                Operation_MULTIPLY ->
                     num1 work * num2 work
-                DIVIDE ->
+                Operation_DIVIDE ->
                     if num2 work == 0 then
                         throw $
                               InvalidOperation {
