Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
module Main where
import System.Random as R
import qualified Data.List as L
alg1 [] = []
alg1 (p:xs) = alg1 [ x | x <- xs, x < p]
++ [p]
++ alg1 [x | x <- xs, x >= p ]
alg2 [] = []
alg2 (p:xs) = (alg2 lesser) ++ [p] ++ (alg2 greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
quicksorts = [alg1, alg2]
testData = take 10 $ R.randomRs (1, 100) (mkStdGen 10) :: [Int]
expectedData = L.sort testData
test = all (== expectedData) $ map ($ testData) quicksorts
main = do
putStrLn $ "Test result: " ++ show test
print $ alg1 testData
print $ alg2 testData
Если бы вы сделали что-то подобное на Haskell, то я бы был первым кто плюсанул вам в карму.
Singleton types are a technique for “faking” dependent types in non-dependent languages, such as Haskell. ... A singleton type is a type with exactly one value. Я думаю паттерны тем и хороши, что они не привязаны к языку.
State, таких как IO, ST, IORef, STRef. Вне контекста состояний, ни одна функция не делит «общее пространство данных», а значит, шаблон Одиночка бессмысленен вне состояний в Хаскеле. … но покамест мне не известно ни одной книги, аналогичной книге Банды Четырех
Дизайн и архитектура в ФП. Введение и Часть 1