Theo nguyên tắc chung, hãy thử trước tiên viết mã như các hàm thuần túy mà không phải lo lắng dữ liệu đến từ đâu - giả sử nó ở đó.
Tiếp theo bọc chức năng thuần túy đó vào IO để nạp dữ liệu chức năng thuần túy của bạn và đặt kết quả ở đâu đó. OK là có lô điều này đang diễn ra trong ứng dụng trò chuyện! Các đơn nguyên IO là không hiệu quả ở tất cả, nó chỉ là chúng tôi muốn giữ càng nhiều mã như chúng ta có thể ra khỏi nó vì đó là thiết kế tốt - giữ dữ liệu crunching ngoài IO. Một ứng dụng trò chuyện không thực hiện nhiều phép tính với dữ liệu mà nó nhận được, vì vậy có thể tải được mã IO.
Tôi nghĩ rằng nó chắc chắn tốt hơn để dính vào đơn nguyên IO hơn sử dụng unsafePerformIO, bởi vì unsafePerformIO là loại trình bày kết quả của nó như là dữ liệu thuần túy. Tôi có thể là bị cám dỗ để sử dụng nó để lấy các hằng số từ tệp cấu hình, nhưng tôi chưa bao giờ thực sự làm như vậy và không có vấn đề gì nếu bạn đang sử dụng đơn lẻ IO. Có một lý do nó được gọi là không an toàn! Petr Pudlák có lời khuyên tốt trong phần bình luận bên dưới.
Tôi đã nghe các bài hát của Haskell được mô tả là best imperative programming language trong thế giới . Tôi có thể tách lông trên mô tả đó, nhưng tôi đồng ý với tình cảm, và có, gắn bó với Haskell. Haskell giỏi về lập trình bạn đang sử dụng.
Hãy xem [Hulk] (http://chrisdone.com/posts/2011-01-30-hulk-haskell-irc-server.html) - bắt đầu viết một máy chủ IRC trong Haskell. – ErikR