Ghci'de, yazdığımda
:t (-)
türünü anlamak (-)
için geri döner
(-) :: Num a => a -> a -> a
Ancak, -1
haskell yazdığımda , bu (-)
tür olduğunu ima eden bir sayı döndürür Num a => a -> a
. (-)
Görünüşte iki farklı tip nasıl olabilir ?
Ghci'de, yazdığımda
:t (-)
türünü anlamak (-)
için geri döner
(-) :: Num a => a -> a -> a
Ancak, -1
haskell yazdığımda , bu (-)
tür olduğunu ima eden bir sayı döndürür Num a => a -> a
. (-)
Görünüşte iki farklı tip nasıl olabilir ?
Yanıtlar:
Bu, dilde bir tasarım kararıdır. -1
bir sayıdır, ancak bu bağlamda kullanımı işlevle ilgili değildir(-)
. (Ackdari'nin yanıtlarında belirttiği gibi, bu kullanım işlevle ilgilidir negate
.) Bunun çalışmasına izin veren birkaç uzlaşma var:
(-)
Operatörün doğru dilimini alamazsınız . Çözüm olarak Haskell subtract
işlevi sağlar.
Ödevin başında değilse (örn. Doğrudan =
veya sonrasında ->
) , parantez olmadan negatif bir tam sayı yazamazsınız . Bu bir ayrıştırma hatası oluşturur:
let x = 8 * -1
Bunun yerine şu şekilde yazılmalıdır:
let x = 8 * (-1)
Ancak, bu iyi:
let x = -1 * 8
Bunlar, dilin tasarımcıları için makul ödünleşmeler olarak kabul edildi.
Unary eksi Haskell'de özeldir. Raporun 3.4 bölümünde belirtildiği gibi :
Özel form , Haskell'deki tek önek operatörü olan önek negatifini belirtir ve sözdizimidir . İkili operatör mutlaka Prelude'un tanımına atıfta bulunmaz ; modül sistemi tarafından geri tepebilir. Ancak, unary her zaman Prelude'ta tanımlanan işleve atıfta bulunacaktır . Operatörün yerel anlamı ile tek taraflı olumsuzlama arasında bir bağlantı yoktur .
-e
negate (e)
-
-
-
negate
-