Haskell은 1990년 발표된 순수 함수형 프로그래밍 언어로, 강한 정적 타입 시스템과 지연 평가(Lazy Evaluation)가 특징이다. 학술 연구와 금융, 컴파일러 분야에서 사용되며 Rust, Scala 등 현대 언어에 큰 영향을 미쳤다.
핵심 특성
| 특성 | 설명 |
|---|
| 순수 함수 | 부작용 없음, 참조 투명성 |
| 지연 평가 | 필요할 때만 계산 |
| 강한 타입 | Hindley-Milner 타입 추론 |
| 타입 클래스 | 다형성 메커니즘 (Functor, Monad 등) |
| 불변성 | 기본 불변 데이터 |
기본 문법
haskell
-- 타입 시그니처와 함수 정의
factorial :: Integer -> Integer
factorial 0 = 1
factorial n = n * factorial (n - 1)
-- 리스트 컴프리헨션
squares :: [Int]
squares = [x^2 | x <- [1..10], even x]
-- [4, 16, 36, 64, 100]
-- 고차 함수
doubleAll :: [Int] -> [Int]
doubleAll = map (*2)
-- 타입 클래스
data Shape = Circle Double | Rectangle Double Double
area :: Shape -> Double
area (Circle r) = pi * r * r
area (Rectangle w h) = w * h
-- Maybe 모나드
safeDiv :: Int -> Int -> Maybe Int
safeDiv _ 0 = Nothing
safeDiv x y = Just (x `div` y)
result :: Maybe Int
result = do
a <- safeDiv 10 2
b <- safeDiv a 1
return (a + b) -- Just 15
Monad 개념
haskell
-- IO 모나드: 부작용을 타입으로 격리
main :: IO ()
main = do
putStrLn "이름을 입력하세요:"
name <- getLine
putStrLn ("안녕하세요, " ++ name ++ "!")
관련 개념