如果我想比較類型或只是在Haskell源文件中打印類型信息,我有什麼選擇?什麼是最接近的等價物:在ghc源文件中輸入ghci?
3
A
回答
4
一個方便的技巧,我最近發現是結合使用輸入孔與asTypeOf
。
如果你有一些代碼確實編譯,你想知道在它表達的類型,有孔替換該表達式有時食堂的事情了,如:
-- what is the type of this part, I wonder?
f xs = 3 * length xs
用_
報道更換length xs
:
foo.hs:1:12: Warning:
Found hole ‘_’ with type: a
Where: ‘a’ is a rigid type variable bound by
the inferred type of f :: t -> a at foo.hs:1:1
length xs
肯定不是a
型的!
但是如果你使用asTypeOf
,你可以離開length xs
有和插入它必須具有相同的類型,因爲它一個洞:
f xs = 3 * (length xs `asTypeOf` _)
現在,我們得到:
foo.hs:1:34: Warning:
Found hole ‘_’ with type: Int
好多了。
asTypeOf
是完全一樣const
,在它返回其第一個參數和完全忽略它的第二位。然而它的類型強制第二個參數與第一個參數相同;它的設計是用反引號書寫的中綴。
它是專爲當你有一個多態的子表達式和GHC抱怨不明確的類型變量;你可以使用內聯類型聲明,但有時如果沒有ScopedTypeVariables
擴展名,這是不可能的。如果有另一個正確類型的值,則可以使用asTypeOf
從多態表達式中選擇適當的情況,而不更改表達式返回的值。
我在這裏使用它是從預期的情況「向後」我想要左邊的東西來限制右側的(被忽略的)洞的類型,而不是相反。
7
foo x = length [x] + _
與GHC或裝載編譯成GHCI會給:
Found hole ‘_’ with type: Int
Relevant bindings include
x :: a
foo :: a -> Int
相關問題
- 1. 經典asp中DateTime.TryParse()的最接近的等價物是什麼?
- 2. 什麼是JavaScript的資源文件夾的Java等價物?
- 3. 什麼是「hasOwnProperty()」接口的等價物?
- 4. 什麼是接口的haskell等價物?
- 5. 在YUI中什麼等價於最接近的(元素)(jQuery)?
- 6. 什麼是「php://輸入」的Ruby等價物?
- 7. 什麼是android中的dataWithContentsOfURL等價物?
- 8. RDFlib中rdf:ID的等價物是什麼?
- 9. Monotouch中的CGPDFDocumentGetCatalog等價物是什麼?
- 10. 什麼是C++中的instanceof等價物?
- 11. 什麼是VC7中的strtok_s等價物?
- 12. jquery中Ajax.updater的等價物是什麼?
- 13. 什麼是JSP中的sendmail等價物?
- 14. jQuery中Class.create()的等價物是什麼?
- 15. python中'gem'的等價物是什麼?
- 16. 什麼是MSTest中MbUnit.Framework.RowAttribute的等價物?
- 17. JQuery中innerHTML的等價物是什麼?
- 18. WinRT中SecureString的等價物是什麼?
- 19. java中fopen_s()的等價物是什麼?
- 20. 什麼是perl中$ _的php等價物?
- 21. Bindingsource中EOF的等價物是什麼?
- 22. 什麼是Java中的「ByRef」等價物?
- 23. java中cin.ignore()的等價物是什麼?
- 24. Swift中@autoreleasepool的等價物是什麼?
- 25. 什麼是C#中的vbNullChar等價物?
- 26. Python中imadjust的等價物是什麼?
- 27. CoreFoundation中NSHomeDirectory()的等價物是什麼?
- 28. 什麼是Silverlight中的OnRender等價物?
- 29. 什麼是GraphicsMagick中的setCompression()等價物?
- 30. C#中bigint的等價物是什麼?