The Option 구조
The Option 구조
Option 구조는 선택 값의 존재 여부를 나타내는 타입 option에 대한 유틸리티 함수를 담아요.
출처: 문서
본문
시놉시스 (Synopsis)
signature OPTION
structure Option :> OPTION
인터페이스 (Interface)
datatype 'a option = NONE | SOME of 'a
exception Option
val getOpt : 'a option * 'a -> 'a
val isSome : 'a option -> bool
val valOf : 'a option -> 'a
val filter : ('a -> bool) -> 'a -> 'a option
val join : 'a option option -> 'a option
val app : ('a -> unit) -> 'a option -> unit
val map : ('a -> 'b) -> 'a option -> 'b option
val mapPartial : ('a -> 'b option)
-> 'a option -> 'b option
val compose : ('a -> 'b) * ('c -> 'a option)
-> 'c -> 'b option
val composePartial : ('a -> 'b option) * ('c -> 'a option)
-> 'c -> 'b option
설명 (Description)
datatype 'a option = NONE | SOME of 'a
getOpt (SOME x, d)은 SOME이면 x를, isSome은 SOME이면 true를, valOf (SOME x)는 SOME이면 패턴 바인딩을 돌려줘요. valOf NONE은 비어 있으므로 예외야요. isNone은 SOME이 아니면 true를 돌려줘요. getOpt은 캐치(catch valOf)입니다.
getOpt (opt, a)
app f (SOME x)는 f x를 적용하고, map f (SOME x)는 SOME (f x)를 돌려줘요. join (SOME (SOME x))는 SOME x를 돌려줘요. filter f (SOME x)는 f x가 true이면 SOME x, 그 외에는 NONE을 돌려줘요.
isSome opt
compose (f, g) (SOME x)는 f(g x)를 돌려주고, composePartial (f, g)은 SOME 반환만 합성해요. composePartial은 f o partial o g를 구성해요.
valOf opt
opt가 SOME(v)이면 v를 돌려주고, 그렇지 않으면 Option 예외를 발생시켜요.
filter f a
f a가 true이면 SOME a를, 그렇지 않으면 NONE을 돌려줘요.
val join : 'a option option -> 'a option
join 함수는 NONE을 NONE으로, SOME(v)는 v로 매핑해요.
app f opt
opt가 SOME(v)이면 함수 f를 값 v에 적용하고, 그렇지 않으면 아무것도 하지 않아요.
map f opt
NONE을 NONE으로, SOME(v)는 SOME(f v)로 매핑해요.
mapPartial f opt
NONE을 NONE으로, SOME(v)는 f v로 매핑해요. mapPartial f라는 표현은 join o (map f)와 동등해요.
compose (f, g) a
g a가 NONE이면 NONE을 돌려주고, g a가 SOME(v)이면 SOME(f v)를 돌려줘요. 즉 compose 함수는 f를 부분 함수 g와 합성해 다른 부분 함수를 만들어요. compose (f, g)라는 표현은 (map f) o g와 동등해요.
composePartial (f, g) a
g a가 NONE이면 NONE을 돌려주고, g a가 SOME(v)이면 f v를 돌려줘요. 즉 composePartial 함수는 부분 함수 두 개 f와 g를 합성해 다른 부분 함수를 만들어요. composePartial (f, g)라는 표현은 (mapPartial f) o g와 동등해요.