Parametre tarafından sağlanan belirtilmemiş bir türde =
çağıran bir parametreli modül yazmaya çalışırsam, SML/NJ bir tür hatası atar.Bir functor parametresi imzasını kısıtlamak için bir yol var mı, böylece parametre bir yapıya belirtilmemiş eşitlik türleri sağlayabilir mi?
Error: operator and operand don't agree [equality type required]
operator domain: ''Z * ''Z
operand: S.t * S.t
in expression:
x = y
: Bir imza
signature SIG =
sig
type t
end
ve imzalı bir modül S
üzerinde bir modül F
parametreleyebilir çalışırsanız Örneğin, SIG
functor F (S : SIG) =
struct
fun f (x:S.t) (y:S.t) = (x = y)
end
aşağıdaki derleme hatası tetikleyecektir
S.t
'un bir eşitlik türü olması gerektiğini nasıl belirleyebilirim?
şimdiye kadar da yapısında eşitlik işlevini temin etmektir anlamaya mümkün olmuştur tek geçici çözüm, üzerinde funktor parametrelenmiştir yani: Daha iyi bir yolu olmalı gibi
signature SIG' =
sig
type t
val eq : (''a * ''a) -> bool
end
functor F' (S' : SIG') =
struct
fun f' x y = S'.eq (x, y)
end
structure A = F'(struct
type t = int
val eq = (op =)
end)
görünüyor Her ne kadar, functor'ların nasıl çalışması gerektiğine dair temel ve önemli bir şeyi yanlış anlamayabilirim.
Ey Tanrım! Daha önce bu anahtar kelime ile nasıl karşılaştığımı bilmiyorum! Belgeleri okumak için mükemmel bir iş yapmamalıyım. Teşekkür ederim! –