Görünüşte iki farklı tipe nasıl sahip olabilirsiniz?


12

Ghci'de, yazdığımda

:t (-)

türünü anlamak (-)için geri döner

(-) :: Num a => a -> a -> a

Ancak, -1haskell 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:


15

Bu, dilde bir tasarım kararıdır. -1bir 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:

  1. (-)Operatörün doğru dilimini alamazsınız . Çözüm olarak Haskell subtractişlevi sağlar.

  2. Ö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.


8

Cevap zaten haskell - wiki'de çözüldü ,

Tekli eksi Prelude fonksiyonu için sözdizimsel şekerdir negate

böylece işlev (-)her zaman a - bişlevdir ve let x = -yderleyici gibi bir kod yazarsanız onu çevirir let x = negate y.


7

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 .-enegate (e)---negate-


2
Bir cümlelik cevaplar, içeriklerinin bir özeti olmadan bağlantılar gibi, kırılabilirler.
Andrew Ray

Wikis / tutorials / youtube videolarına kıyasla raporlara / standartlara olan bağlantıların da büyük ölçüde kötüleştiğini varsayabilir miyim?
bipll

@bipll Evet. Yalnızca bağlantı yanıtlarıyla ilgili sorun, bağlantı hedefinin kalitesi değil, bağlantı çürümesi riskidir. Raporun ilgili bölümüne kopyaladıysanız, cevabınız iyi olur.
Joseph Sible-Reinstate Monica
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.