bir yapıya "açmak" Nasıl Geçenlerde bu sorun üzerinde geldi ve bir çözüm buldum ama daha iyi (ya da sadece daha deyimsel) çözümler olup olmadığını merak ediyorum.Haskell
Bir renk için bir yapıya sahiptir:
data Rgb = Rgb Double Double Double
Ve Kahire'den aslında tek tek renk bileşenleri geçmek istediğiniz bir işlevi vardır:
setSourceRGB :: Double -> Double -> Double -> Render()
yüzden gerek Bu veri yapısını bir şekilde açmak için, setSourceRGB
bir Rgb
almaz. İki yol buldum. Sonra Yapabileceğim
applyRgb :: (Double -> Double -> Double -> t) -> Rgb -> t
applyRgb f (Rgb r g b) = f r g b
: biri, bir Rgb
içeriğini uygulamak için bir işlev tanımlamaktır
applyRgb setSourceRGB rgb
Bir dava ile bir satır içi Lambda ifade yapmaktır ile geldi başka yolu da, bir şekilde doğru görünmüyor sadece bazı değerler geçirmek için bir işlev uygulayarak,
(\z -> (case z of (Rgb r g b) -> setSourceRGB r g b)) rgb
Ancak bu tamamen mutlu değilim: Ben ayrı işlevi tanımlamak gerekmez anlamına gelir. Ben bunu tersine çevirmek mümkün ister ve setSourceRGB
için doğru türüne Rgb
"dönüştürmek" olur. Ne yazık ki bana öyle geliyor ki bu bir fonksiyonu setSourceRGB
geçirilebilir
fromRgb :: Rgb -> Double -> Double -> Double
olması imkansızdır bu. Belki applyRgb
en iyi çözümdür, ama bana bunu ifade sağlayacak bazı iyi bir yolu olup olmadığını merak ediyorum:
setSourceRGB (fromRgb rgb)
? '(\ (RGB Rg b) -> SetSource Rg b) – ephemient