diff --git a/Foundation/Network/IPv4.hs b/Foundation/Network/IPv4.hs
--- a/Foundation/Network/IPv4.hs
+++ b/Foundation/Network/IPv4.hs
@@ -11,6 +11,7 @@
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeApplications #-}
 
 module Foundation.Network.IPv4
     ( IPv4
@@ -20,7 +21,7 @@
     , ipv4Parser
     ) where
 
-import Prelude (fromIntegral,read)
+import Prelude (fromIntegral)
 
 import Foundation.Class.Storable
 import Foundation.Hashing.Hashable
@@ -31,8 +32,7 @@
 import Basement.Bits
 import Foundation.Parser hiding (peek)
 import Foundation.Collection (Sequential, Element, elem)
-
-import qualified Prelude (String)
+import Text.Read (readMaybe)
 
 -- | IPv4 data type
 newtype IPv4 = IPv4 Word32
@@ -107,8 +107,10 @@
     return $ fromTuple (i1, i2, i3, i4)
   where
     takeAWord8 = do
-      n <- (read :: Prelude.String -> Integer) . toList <$> takeWhile isAsciiDecimal
-      if n > 256
-        then reportError $ Satisfy $ Just "expected smaller integer than 256"
-        else return (fromIntegral n)
+      maybeN <- readMaybe @Integer . toList <$> takeWhile isAsciiDecimal
+      case maybeN of
+        Nothing -> reportError $ Satisfy $ Just "expected integer"
+        Just n | n > 256   -> reportError $ Satisfy $ Just "expected smaller integer than 256"
+               | otherwise -> pure (fromIntegral n)
+
     isAsciiDecimal = flip elem ['0'..'9']
diff --git a/Foundation/System/Entropy/Windows.hs b/Foundation/System/Entropy/Windows.hs
--- a/Foundation/System/Entropy/Windows.hs
+++ b/Foundation/System/Entropy/Windows.hs
@@ -92,6 +92,12 @@
 cryptGenRandom :: CryptCtx -> Ptr Word8 -> Int -> IO Bool
 cryptGenRandom h buf n = toBool `fmap` c_cryptGenRandom h (Prelude.fromIntegral n) buf
 
+
+newtype WindowsRandomBackendError = WindowsRandomBackendError [Char]
+    deriving (Show,Eq)
+
+instance Exception WindowsRandomBackendError
+
 cryptReleaseCtx :: CryptCtx -> IO ()
 cryptReleaseCtx h = do
     success <- toBool `fmap` c_cryptReleaseCtx h 0
@@ -99,4 +105,4 @@
         then return ()
         else do
             lastError <- getLastError
-            fail $ "cryptReleaseCtx: error " <> show lastError
+            throwIO (WindowsRandomBackendError $ show lastError)
diff --git a/foundation.cabal b/foundation.cabal
--- a/foundation.cabal
+++ b/foundation.cabal
@@ -1,5 +1,5 @@
 name:                foundation
-version:             0.0.24
+version:             0.0.25
 synopsis:            Alternative prelude with batteries and no dependencies
 description:
     A custom prelude with no dependencies apart from base.
@@ -196,7 +196,7 @@
                       BangPatterns
                       DeriveDataTypeable
 
-  if impl(ghc < 8.0)
+  if impl(ghc < 8.0) || impl(ghcjs)
     buildable: False
   else
     build-depends:   base
diff --git a/tests/Test/Foundation/Network/IPv4.hs b/tests/Test/Foundation/Network/IPv4.hs
--- a/tests/Test/Foundation/Network/IPv4.hs
+++ b/tests/Test/Foundation/Network/IPv4.hs
@@ -50,4 +50,6 @@
     , testPropertyStorableFixed "StorableFixed" (Proxy :: Proxy IPv4)
     , Property "Word8 overflow is detected" $
         forAll genOverflowingIPv4String $ \x -> isLeft $ parseOnly ipv4Parser x
+    , Property "www.example.com" $
+        isLeft $ parseOnly ipv4Parser ("www.example.com" :: String)
     ]
diff --git a/tests/Test/Foundation/Primitive/BlockN.hs b/tests/Test/Foundation/Primitive/BlockN.hs
--- a/tests/Test/Foundation/Primitive/BlockN.hs
+++ b/tests/Test/Foundation/Primitive/BlockN.hs
@@ -23,9 +23,7 @@
      ]
 
 testWithDifferentN =
-    Group "Multiple n" $ do
-        Foo n <- ns
-        [testBlock n]
+    Group "Multiple n" $ fmap (\(Foo p) -> testBlock p) ns
 
 testBlock :: forall n . (KnownNat n, NatWithinBound (CountOf Int) n) => Proxy n -> Test
 testBlock nProxy =
@@ -48,6 +46,7 @@
 
 data Foo = forall a . (KnownNat a, NatWithinBound (CountOf Int) a) => Foo (Proxy a)
 
+ns :: [Foo]
 ns =
     [ Foo (Proxy :: Proxy 0)
     , Foo (Proxy :: Proxy 1)
