readFifo' :: MVar String -> IO [String]
readFifo' mvar = do
  x <- unsafeInterleaveIO $ takeMVar mvar
  xs <- unsafeInterleaveIO $ readFifo' mvar
  return $ x : xs
readFifo' :: MVar String -> IO [String]
readFifo' mvar = do
  x <- unsafeInterleaveIO $ takeMVar mvar
  xs <- unsafeInterleaveIO $ readFifo' mvar
  return $ x : xs
readFifo' mvar = do
  x <- unsafeInterleaveIO $ takeMVar mvar
  xs <- unsafeInterleaveIO $ readFifo' mvar
  return $ x : xs