16

Gần đây tôi đã xem Haskell và dường như là một cách rất hay để xem các vấn đề lập trình từ một quan điểm thay thế - thay thế cho chế độ xem thường lệ (tôi có nền C++ mạnh), ít nhất.Ứng dụng hướng sự kiện nào được triển khai trong Haskell?

Tuy nhiên, tất cả các bài viết tôi thấy dường như để đối phó với các loại tương tự của các vấn đề lập trình:

  • parsers
  • Trình biên dịch
  • vấn đề tính toán Numeric

Tôi muốn hãy thử Haskell, bằng cách viết một số ứng dụng GUI. Do đó, tôi tự hỏi: nó có ý nghĩa để viết các hệ thống hướng sự kiện như GUI trong một ngôn ngữ lập trình hàm như Haskell? Hay đó là một miền có vấn đề mà ngôn ngữ bắt buộc vượt trội? Thật không may, nó vẫn mất khá nhiều thời gian để tôi chuyển sang chế độ 'chức năng', vì vậy tôi có một thời gian khó khăn quyết định tranh luận hoặc ủng hộ việc sử dụng ngôn ngữ lập trình hàm cho một hệ thống hướng sự kiện.

Tôi cũng muốn được quan tâm đến các ví dụ về các ứng dụng GUI (hoặc các hệ thống hướng sự kiện, nói chung) được triển khai trong Haskell.

+0

Gtk2hs là Gtk ràng buộc cho Haskell. – Hai

+13

Bạn, thưa bạn, đơn giản là quá lịch sự: những người khác luôn hỏi liệu Haskell có thể được sử dụng trong "thế giới thực" hay không, do đó ngụ ý rằng các lập trình viên của Haskell không phải là "những lập trình viên thực" (bất cứ điều gì * có nghĩa là) . Nếu bạn thực sự sử dụng * những từ khóa * thay vì "hướng sự kiện", bạn sẽ thực sự tìm thấy khá nhiều câu hỏi và câu trả lời ở đây trên StackOverflow. –

+0

Ví dụ: http://StackOverflow.Com/questions/1113226/ –

Trả lời

15

Dưới đây là một vài từ khóa Google dành cho bạn:

  • Functional Reactive Programming (FRP), một mô hình lập trình cho, cũng phản ứng (hay còn gọi là event-driven) ngôn ngữ hoàn toàn chức năng lập trình trong,
  • Leksah, một Haskell IDE viết bằng Haskell,
  • Yi, trình chỉnh sửa giống như Emac, thay thế Lisp bằng Haskell như ngôn ngữ thực hiện, cấu hình, tùy chỉnh và viết kịch bản,
  • Super Monao Bros. (có, y ou đoán nó, một Jump & Run trò chơi)
  • Frag (First-Person Shooter)
  • Purely Functional Retrogames là một loạt 4 phần của bài viết blog về làm thế nào để viết trò chơi trong một ngôn ngữ hoàn toàn chức năng, giải thích bằng Pacman như ví dụ . (Part 2, Part 3, Part 4.)
+1

Bộ sưu tập liên kết tuyệt vời! Đặc biệt là cuối cùng là khá thú vị. Cảm ơn một tấn! –

5

xmonad là trình quản lý cửa sổ X11 được viết bằng Haskell.

Ngoài ra, hãy xem cách thực hiện Haskell GUI Libraries khác nhau có thể đưa ra một số ý tưởng về cách các chương trình tương tác được thực hiện trong Haskell.

+0

Có, tôi đã xem Thư viện GUI Haskell nhưng đã có cảm giác kỳ lạ rằng chúng chỉ là các ràng buộc 'đơn thuần' với các API được thiết kế với tư duy 'bắt buộc'. Tôi nghi ngờ rằng lập trình viên với tư duy 'chức năng' có thể có cách tiếp cận khác với cùng một vấn đề. –

+1

"FG là một phương pháp tiếp cận chức năng cấp cao dựa trên mũi tên cho GUI có thể kết hợp" "FranTk sử dụng hành vi và sự kiện, khái niệm từ Hoạt động phản ứng chức năng của Conal Elliott" "Bưởi là thư viện khai báo dựa trên mũi tên. tín hiệu rời rạc và liên tục. " - các bản ghi này không phải là mô tả về "chỉ ràng buộc". –

3

Hãy xem this wikibooks article, đây là hướng dẫn cơ bản wxHaskell. Đặc biệt, xem Events section.

Tôi khuyên bạn nên dành một chút thời gian chất lượng với Haskell và FP nói chung trước khi nhảy vào để phát triển một ứng dụng hoàn toàn chính thức để bạn có thể nhận được nhiều hơn làm quen với Haskell, vì nó hoàn toàn khác với C++

+0

Bạn nói đúng là phải mất một thời gian để làm quen với Haskell. Tuy nhiên, tôi nhận thấy rằng nó không phải là khó khăn nếu bạn đã làm việc với lập trình meta mẫu trong C++ trước đây. Lập trình meta mẫu cũng rất khai báo, và bạn đã quen với việc thực hiện lặp lại vv mà không sử dụng trạng thái (nhưng đệ quy). –

3

xmonad là hướng sự kiện - xem vòng lặp xử lý sự kiện chính, nhận thông báo từ máy chủ X và gửi đến mã thuần túy, sau đó hiển thị trạng thái ra màn hình.

4

Dưới đây là một ví dụ sử dụng epoll để thực hiện một sự kiện điều khiển máy chủ web: http://haskell.org/haskellwiki/Simple_Servers

+0

Gọn gàng! Đó là một ví dụ rất hay - và nó có thể được viết bởi một số Haskell có kinh nghiệm. Vì vậy, cơ hội mà tôi chọn lên những thói quen xấu không có cao như ở những nơi khác. ;-) –

3

"lập trình phản ứng chức năng" đã được đề cập, nhưng nó có thể dường như phức tạp nếu bạn đang nhìn vào nó lần đầu tiên (và nếu bạn đang xem xét một số bài viết nâng cao, nó sẽ trông phức tạp không có vấn đề bao lâu bạn đã nghiên cứu nó :-)). Tuy nhiên, có một số điều rất tốt đẹp mà sẽ giúp bạn hiểu nó:

  • Composing Reactive Animations bởi Conal Elliott cho thấy một "thư viện combinator" (một phong cách lập trình phổ biến trong các ngôn ngữ chức năng) để mô tả hình ảnh động. Nó bắt đầu với các ví dụ rất đơn giản, nhưng cũng cho thấy bit "phản ứng" thú vị hơn trong phần thứ hai.

  • Yampa Arcade là bản trình diễn phát triển hơn về Lập trình phản ứng chức năng. Nó sử dụng một số tính năng Haskell nâng cao (chẳng hạn như Mũi tên), nhưng vẫn rất dễ đọc. Bắt nó để thực sự chạy có thể phức tạp hơn, nhưng nó là một đọc tuyệt vời.

  • Haskell School of Expression bởi Paul Hudak là một cuốn sách hướng dẫn Haskell sử dụng đa phương tiện và đồ họa (bao gồm một số hoạt ảnh, v.v.). Nó là một bài đọc tuyệt vời, nhưng phải mất nhiều thời gian hơn vì nó là toàn bộ một cuốn sách :-).

Tôi tìm cách lập trình hàm qua F #, ít tinh khiết hơn so với Haskell, nhưng nó cung cấp cho bạn quyền truy cập đầy đủ vào thư viện .NET. thế giới "công nghệ từ một ngôn ngữ chức năng. Trong trường hợp bạn quan tâm, có một vài ví dụ trên my blog.

+0

Ooh, rất tuyệt! Cảm ơn các liên kết này! Ngoài ra, cảm ơn bạn đã chỉ ra rằng F # có chức năng và cho phép truy cập vào các thư viện .NET! –

Các vấn đề liên quan