함수의 결과가 정확히 한 번만 consume 될 때, 함수 인자도 정확히 한 번만 consume되면 그 함수는 리니어하다고 말합니다. 함수가 Sum타입을 패턴 매칭한다든지 해서 여러 실행 경로가 생길 때, 각 경로에서 인자를 딱 한번만 쓰는 걸 말합니다.
GHC 공식 문서 - 6.4.18. Linear types
타입에 “인자를 한 번만 쓴다는 걸” 명시한 타입입니다. 타입 서명에 인자를 딱 한 번만 사용한다고 명시하면, 컴파일러가 서명과 구현을 비교해서 구현이 인자를 두 번 이상 쓰면 컴파일 에러를 뱉습니다. 인자를 한 번만 쓰게 하면 무슨 효과가 있을까요?
“mutation을 안전하게 쓸 수 있습니다.”
mutation을 안전하게 하는 방법으로 아래 두 가지를 들 수 있습니다.
첫 번째 방법을 쓰는 게 ST 모나드이고, 두 번째 방법이 리니어 타입입니다. 두 가지 다 mutation을 안전하게 쓸 수 있다는 걸 타입 레벨에서 보증check하는 방법입니다.
(아직 내용 없음)
확장 LinearTypes
를 켜면 a %1 -> b
, a %m -> b
문법을 사용할 수 있게 됩니다.
a %1 -> b
이렇게 쓰면 a
를 한 번만 쓰는 a -> b
타입 리니어 함수란 뜻입니다.