2016-06-22 26 views
5

Bir süredir Haskell'i öğreniyorum, bu yüzden bazı popüler projelerin gerçekte nasıl göründüğünü ve belki de süreci tersine çevirdiğini hissetmeye karar verdim.Haskell (iş akışı) fonksiyon kaynağını bul

Hakyll'i seçtim çünkü bildiğim ve orta derecede karmaşık bir şey yapıyor. Ve sonra hemen soru ile sıkışıp kaldım: ithalatı nasıl geri çevirebilirim?

Say, JavaScript'te her import müstehcen. Her şeyi tek seferde bozar ve insanlar

import Q 

için

let Q = require("Q")   // namespace 
let {foo} = require("Q/foo") // value 

Haskell varsayılan gerçekten kötüye görünüyor.

Şimdi kaynağında tutorial'a bakıyorum ve bir ya da başka işlevin bulunduğu yerde hiçbir ipucum olmadığını ve arama dışında nasıl keşfedileceğine dair bir ipucu olmadığını anlıyorum.

Kaynak dosyayı veya herhangi bir şeyi ortaya çıkaracak sözdizimi hatası yapmak gibi bu tür bilgileri keşfetmek için bir numara var mı? İş akışınızda bu tür görevleri nasıl çözersiniz? Derlenebilir kod gerektirmeyen

+0

Sen fonksiyon isimleri veya hoogle bile imzalar arayabilirsiniz: https://www.haskell.org/hoogle/ açıkça size 'ithalat Q (foo)' yazarak ithal etmek istediğini belirtebilirsiniz – erdeszt

+0

Not. Ayrıca: haskell işlevlerini aramak için [hoogle] (https://www.haskell.org/hoogle/) veya [hayoo] (http://hayoo.fh-wedel.de/) kullanın. – Bakuriu

+1

@Bakuriu - spesifikasyon, kod verildiğinde ve önceden tanımlandığında tersine mühendislik için yardımcı olamaz. –

cevap

6

bazı seçenekler: kendi veritabanı Stackage hepsi ile yüklenir beri

Ben Stackage en hoogle öneriyoruz.

çalışmaya varsa kod:

  • , son iki seçenekten bir örnek olarak da editör veya komut satırından

yoluyla GHCi içinde

  • kullanım ghc-mod :i komutunu kullanın senin görünen bir modül Foo.hs olduğunu varsayalım gibi:

    module Foo where 
    import Data.Maybe 
    ... 
    
    kullanma 210

    :

    $ ghci Foo.hs 
    GHCi, version 7.10.2: http://www.haskell.org/ghc/ :? for help 
    [1 of 1] Compiling Foo    (Foo.hs, interpreted) 
    Ok, modules loaded: Foo. 
    *Foo> :i catMaybes 
    catMaybes :: [Maybe a] -> [a] -- Defined in ‘Data.Maybe’ 
    *Foo> 
    

    ghc-mod kullanma: Intero for Emacs kullanıyorsanız

    $ ghc-mod info Foo.hs catMaybes 
    catMaybes :: [Maybe a] -> [a] -- Defined in ‘Data.Maybe’ 
    $ 
    
  • +0

    Demek istediğim, şunu göstereceğim: '' GHC.Foo.Bar’' içinde tanımlanmıştır - bu iyi. "Ghc-mod" için - bir Stack eşdeğer verilebilir. Cevabın çıktı örnekleri ile kapsamlı olacağını düşünüyorum. –

    +0

    Yanıt güncellendi. 'Stack' için' get ghci' kullanmak ghci’ye girer. – ErikR

    +0

    Hala bir Haskell platformu :( –

    4

    , bu standardı M-. ait kısayol "tanımı gidin" destekler.

    Diğer İntero ön cepheler muhtemelen bu işlevsellik için editörlerinin standart kullanıcı arayüzlerini kullanırlar; Biliyorum zaten NeoVim frontend var.

    +0

    teşekkür ederiz olmadan 'ghc-mod' komut çalıştırma belirsiz. IDE olası seçeneklerden biridir. "Haskell Mac için" projesinde bu özelliğin kullanılabilirliği hakkında haberdar herkes? –

    0

    Bu tür bir Haskell kodunun vim desteğine sahip olmasını istiyorsanız, Stephen Diehl'in güzel eğiticisi Vim and Haskell in 2016'u deneyebilirsiniz.

    Haskell için, kod hakkında bilgi için GHC derleyicisini sorgulamanıza izin veren çeşitli düzenleme ortamları vardır. Örneğin, ben vim-hdevtools kullanın ve ben vim dosyayı hakyll/src/Hakyll/Main.hs açmak Commands.build sembolün üzerine imleci komutu :HdevtoolsInfo girin ve ardından GHC bana sembolün türünü anlatacağım ve tanımlanır nerede ve verebilir bana tanım atlamak için seçenek.

    Commands.build :: 
        Config.Configuration -> Logger.Logger -> Rules a -> IO ExitCode 
         -- Defined at hackyll/src/Hakyll/Commands.hs:48:1 
    

    Ancak, ben zaman getting vim-hdevtools to work harcamak yaptığını itiraf ediyorum.