Monad transformatörlerini kendi küçük kitaplığımı kullanarak mevcut olanların tasarımlarına dayanarak anlamaya çalışıyorum.MTL kütüphanesi hangi dil uzantılarını gerektirir?
Neye takıldığım dil uzantılarıdır. MonadError'da, bahsedilen tek uzantı UndecidableInstances
'dur. Ancak, FunctionalDependencies
ve FlexibleInstances
'u kullanmadan derlemek için benzer kodları alamıyorum.
class (Monad m) => MonadError e m | m -> e where
Ve esnek örneği:
instance MonadError e m => MonadError e (MaybeT m) where
nasıl
MonadError
kod fazladan iki uzantıları önlemek mi İnanıyorum
Örnek FunDeps gerektirir?
Not: Bunu yapabilirsin, ama birçok insan her dosyada 'LANGUAGE' pragmas ile uzantılarını heceleyerek tercih ediyorum. Bu sayede dosyalar bağımsız ve güvenilir olabilir ve her bir dosyanın hangi uzantıları kullandığını görmek kolaydır, çünkü her bir dosya için her uzantıyı açmanız gerekmez. Hangi uzantıları kullandığınıza ve ne kadar yaygın olduğuna bağlıdır. – shachaf
@shachaf: Kesinlikle. İyi bir nokta. Ben de kişisel olarak, bunları kullanan her kaynak dosyadaki her uzantıyı hecelemeyi tercih ederim. – shang
Her ikisi de kullanışlıdır. Önerilen yaklaşımın, bir 'LANGUAGE' pragma kullanılarak dosya başına gerekli uzantıların yazılması ve Cabal'ın' diğer eklentileri 'alanındaki bir paket için gerekli uzantıların kaydedilmesi gerektiğine inanıyorum. “Diğer uzantılar” listesi varsayılan olarak etkin değildir, ancak bir paketin hangi uzantı gereksinimlerini (tüm kaynak dosyalarına ayrı ayrı bakmak zorunda kalmadan) anlamaya hizmet edebilir. – kosmikus