(* 나는 더 많은 관심을가 명확하게하기 위해 내가 이전에 게시 된 질문을 재구성하고 유치하고 싶습니다 ... 나는 * ... 문제는 여전히 흥미로운 생각)재구성 이중 구현을 피하기 위해
다음과 같이 나는 모듈 형 ZONE
을 정의 : 반복 계산을 피할 수 있도록 다양한 정보를 포함하는 데 사용됩니다 i: info
(* part of zone.ml *)
module type ZONE =
sig
type info
type prop
type t = { s: string; p: prop; i: info }
val f1 : t -> string
end
. Prop
에서 Zone
이 만들어지기 때문에 항상 동일하지는 않습니다. 여기
(* part of zone.ml *)
module ZoneFun (Prop : PROP) = struct
type info = { a: int }
type prop = Prop.t
type t = { s: string; p: prop; i: info }
let f0 z = "f0"
...
end
이 상대적으로 입력
ZONE
의 모듈
Zone
를 구축하는 또 다른 펑터입니다 : 예를 들어, 여기에 기본
info
와 유형
PROP
의 모듈에서 유형
ZONE
의 모듈
Zone
을 구축하는 펑터이다 더 복잡
info
다음과 같이
(* zoneFunPrec.ml *)
module ZoneFunPrec (Prop: PROP) (Prec: ZONESM) = struct
type info = { a: int; b: Prec.t }
type prop = Prop.t
type t = { s: string; p: prop; i: info }
let get_prec z = z.info.prec
let f0 z = "f0"
...
end
그럼 난 펑터를 사용할 수 있습니다
module ZoneC = ZoneFun(PropC)
module ZoneA = ZoneFunPrec(PropA)(ZonesmB)
문제는 이러한 2 개의 펑터의 유일한 차이점은 type info
과 get_prec
(ZoneFun
이 있으며, ZoneFunPrec
은 그렇지 않음)입니다. 그들의 type prop
과 type t
은 동일하고, 그들의 기능은 f0
, f1
... (꽤 여러 가지가 있습니다) 정확히 동일합니다.
f0
,
f1
을 구현에서 방지하는 방법 궁금 등 두 번 ...
사람이를 달성하고 그들에게 의미있는 모듈/펑터 구조 조정의 아이디어가 있습니까?
가능한 한 작은 문제를 시도하고 컴파일하십시오. 귀하의 코드는 응답자에게 너무 많은 의미없는 세부 사항을 포함하고 있으며, 완전하지는 않으며 편집 할 수 없습니다. ZoneFunPrec (ProcC)이 잘못되었습니다. ZoneFun (ProcC) – camlspotter
방금 개정 된 ZoneFun (ProcC)에 대해 정확합니다 ... – SoftTimur