diff --git a/pkgs/development/libraries/haskell/io-streams/default.nix b/pkgs/development/libraries/haskell/io-streams/default.nix
new file mode 100644
index 00000000000..73fd923dc46
--- /dev/null
+++ b/pkgs/development/libraries/haskell/io-streams/default.nix
@@ -0,0 +1,28 @@
+{ cabal, attoparsec, blazeBuilder, deepseq, filepath, HUnit, mtl
+, network, primitive, QuickCheck, testFramework, testFrameworkHunit
+, testFrameworkQuickcheck2, text, time, transformers, vector, zlib
+, zlibBindings
+}:
+
+cabal.mkDerivation (self: {
+  pname = "io-streams";
+  version = "1.1.3.0";
+  sha256 = "1vw9znmnl9syfgr3rplf7fa57qgmjgf8n1kh3ffiqkgrdpif6p9c";
+  buildDepends = [
+    attoparsec blazeBuilder network primitive text time transformers
+    vector zlibBindings
+  ];
+  testDepends = [
+    attoparsec blazeBuilder deepseq filepath HUnit mtl network
+    primitive QuickCheck testFramework testFrameworkHunit
+    testFrameworkQuickcheck2 text time transformers vector zlib
+    zlibBindings
+  ];
+  meta = {
+    description = "Simple, composable, and easy-to-use stream I/O";
+    license = self.stdenv.lib.licenses.bsd3;
+    platforms = self.ghc.meta.platforms;
+    maintainers = [ self.stdenv.lib.maintainers.ocharles ];
+  };
+  configureFlags = "-fNoInteractiveTests";
+})
diff --git a/pkgs/development/libraries/haskell/websockets/default.nix b/pkgs/development/libraries/haskell/websockets/default.nix
new file mode 100644
index 00000000000..fa623cf6004
--- /dev/null
+++ b/pkgs/development/libraries/haskell/websockets/default.nix
@@ -0,0 +1,27 @@
+{ cabal, attoparsec, base64Bytestring, binary, blazeBuilder
+, caseInsensitive, entropy, HUnit, ioStreams, mtl, network
+, QuickCheck, random, SHA, testFramework, testFrameworkHunit
+, testFrameworkQuickcheck2, text
+}:
+
+cabal.mkDerivation (self: {
+  pname = "websockets";
+  version = "0.8.1.1";
+  sha256 = "0mgazf0s9sl53r5smidrfqcx7rq2v4kfm37f4f6mjrl656qxpbwd";
+  buildDepends = [
+    attoparsec base64Bytestring binary blazeBuilder caseInsensitive
+    entropy ioStreams mtl network random SHA text
+  ];
+  testDepends = [
+    attoparsec base64Bytestring binary blazeBuilder caseInsensitive
+    entropy HUnit ioStreams mtl network QuickCheck random SHA
+    testFramework testFrameworkHunit testFrameworkQuickcheck2 text
+  ];
+  meta = {
+    homepage = "http://jaspervdj.be/websockets";
+    description = "A sensible and clean way to write WebSocket-capable servers in Haskell";
+    license = self.stdenv.lib.licenses.bsd3;
+    platforms = self.ghc.meta.platforms;
+    maintainers = [ self.stdenv.lib.maintainers.ocharles ];
+  };
+})
diff --git a/pkgs/top-level/haskell-packages.nix b/pkgs/top-level/haskell-packages.nix
index 7e615ee26a8..038130766d5 100644
--- a/pkgs/top-level/haskell-packages.nix
+++ b/pkgs/top-level/haskell-packages.nix
@@ -1423,6 +1423,8 @@ let result = let callPackage = x : y : modifyPrio (newScope result.finalReturn x
 
   ioStorage = callPackage ../development/libraries/haskell/io-storage {};
 
+  ioStreams = callPackage ../development/libraries/haskell/io-streams {};
+
   iproute = callPackage ../development/libraries/haskell/iproute {};
 
   irc = callPackage ../development/libraries/haskell/irc {};
@@ -2407,6 +2409,8 @@ let result = let callPackage = x : y : modifyPrio (newScope result.finalReturn x
 
   webRoutesBoomerang = callPackage ../development/libraries/haskell/web-routes-boomerang {};
 
+  websockets = callPackage ../development/libraries/haskell/websockets {};
+
   CouchDB = callPackage ../development/libraries/haskell/CouchDB {};
 
   wlPprint = callPackage ../development/libraries/haskell/wl-pprint {};