2015-10-22 9 views
6

Để dạy Haskell cho người mới bắt đầu sử dụng phiên bản GHC gần đây, các loại chức năng có thể gây nhầm lẫn do có thể gập lại-Tra-in-Prelude (FTP). Ví dụ: các chức năng cơ bản trên các danh sách như length, sumproduct có các loại bao gồm ràng buộc Foldablefoldr :: Foldable t => (a -> b -> b) -> b -> t a -> b. Tương tự như vậy đối với một số hàm bậc cao hơn giới thiệu, ví dụ: foldl :: Foldable t => (b -> a -> b) -> b -> t a -> b.Làm cho bài đăng của GHC FTP cảm thấy pre-FTP

Cách nhẹ để tạm thời bật hành vi pre-FTP là gì? Sau đó, người mới bắt đầu vẫn có thể tận hưởng tất cả lợi ích của GHC gần đây và không cần phải cố gắng cài đặt các phiên bản cũ hơn hoặc sử dụng Hugs (ví dụ như được đề xuất cho phiên bản FP101x 2015 của edX).

+1

Tại sao không chỉ sử dụng GHC 7.8? Sử dụng hugs Tôi sẽ không khuyên bạn nên – jberryman

+2

Tôi đồng ý rằng tôi sẽ không khuyên bạn nên Hugs. Tuy nhiên, kể từ khi sử dụng GHC 7.10 và sau này cũng có cách giải quyết khá dễ dàng, tôi cũng không khuyến nghị sử dụng GHC 7.8. – algotrific

+1

Tôi đoán tôi nên hỏi: điều gì khiến bạn muốn 7,10 cho việc dạy học? Họ là cả hai trình biên dịch tuyệt vời, được hỗ trợ bởi lts stackage, dễ dàng như nhau để cài đặt, vv Trên thực tế không có một số vấn đề với 7,10 mới nhất trên máy mac? – jberryman

Trả lời

9

Điều đó có thể làm việc tốt, nhưng chúng tôi quyết định đi với một cái gì đó ít tẻ nhạt cho http://haskellbook.com/, những gì chúng tôi làm là chúng tôi giải thích những gì đã thay đổi và cho họ thấy làm thế nào bạn có thể khẳng định loại danh sách dựa trên.

Prelude> :t length 
length :: Foldable t => t a -> Int 
Prelude> :t length :: [a] -> Int 
length :: [a] -> Int 

giữa đó và các loại khẳng định trong các ví dụ & bài tập, điều này đã đủ để đáp ứng và nếu họ vô tình gặp phải một loại với có thể gập lại trong nó, nó không gây ra rắc rối bởi vì chúng tôi đã nói với họ mọi thứ thay đổi như thế nào.

Làm cho chúng nhập nội dung và không làm phiền cho họ biết điều gì đã xảy ra có vẻ giòn, vì họ sẽ bị lẫn lộn nếu họ thoát khỏi con đường hạnh phúc.

7

Một lựa chọn thể hiện như sau:

$ ghci 
Prelude> import Prelude hiding (length, sum, product, foldr, foldl, and, or, any, all) 
Prelude> import GHC.OldList 
Prelude GHC.OldList> 

Sau đó, bạn sẽ có được các loại cũ cho tất cả những gì đã được ẩn, ví dụ

length :: [a] -> Int 
sum :: Num a => [a] -> a 
product :: Num a => [a] -> a 
foldr :: (a -> b -> b) -> b -> [a] -> b 
foldl :: (b -> a -> b) -> b -> [a] -> b 
and :: [Bool] -> Bool 
any :: (a -> Bool) -> [a] -> Bool 
all :: (a -> Bool) -> [a] -> Bool 
+3

hoặc tốt hơn: xác định comppat của riêng bạn. mô-đun dựa trên câu trả lời của bitemyapp và cho phép họ xem và hiểu nội dung của nó. –

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