標準ML中是否有可能重新導出作爲函數參數接收的結構的一部分的數據類型的構造函數。某些代碼可能會使這更容易理解:如何從標準ML中的函數參數中重新導出數據類型標準ML
signature FLAG =
sig
type t
end
signature MEMBER =
sig
structure Flag : FLAG
end
functor Member(F : FLAG) : MEMBER =
struct
structure Flag = F
end
structure M =
Member(struct
datatype t =
FLAG_1
| FLAG_2
end)
val flag1 = M.Flag.FLAG_1;
(* Error: unbound variable or constructor: FLAG_1 in path M.Flag.FLAG_1 *)
上面的例子可以不作任何形式的實際意義,但它是我在我的一個項目中遇到的問題,只是一個淡化的版本。
感謝。你是完全正確的。我對自己的項目感到厭倦,錯過了在簽名中未指定類型時發生的事實。在我的具體情況中,我有兩個不同的'FLAG'結構,有兩個不同的'datatype'聲明,所以我不能真正定義一個簽名。再次感謝。 –
我想(希望!)你的情況應該能夠實現!也許正確使用'where'? SML模塊系統是我已經接觸到的最令人興奮的PL構造之一,但是經常和在許多方面,我感覺有侷限性並遇到障礙,使得它明確表示模塊系統不是我想要的。我仍然試圖確定哪些部分是語言實施所強加的限制,哪些部分是良構和邏輯正確性的嚴格限制。 –
我能夠通過使用一種我稱之爲mixin模式的模式來解決這個問題,我只是簡單地'打開'functor'調用的結果。 https://gist.github.com/igstan/c566eecc38784216f1499bfe8d91f4c4 –