Haskell'e bir Java uygulaması yerleştiriyorum. Java uygulamasının ana yöntem desen aşağıdaki gibidir: Haskell'de erken çıkış/dönüş nasıl uygulanır?
public static void main(String [] args)
{
if (args.length == 0)
{
System.out.println("Invalid number of arguments.");
System.exit(1);
}
SomeDataType d = getData(arg[0]);
if (!dataOk(d))
{
System.out.println("Could not read input data.");
System.exit(1);
}
SomeDataType r = processData(d);
if (!resultOk(r))
{
System.out.println("Processing failed.");
System.exit(1);
}
...
}
yüzden farklı adımlar var ve ya bir hata kodu ile ya çıkış can her adımdan sonra aşağıdaki adıma geçin. aşağıdaki gibi Haskell bu taşıma de
girişimim gider: Bu çözüm ile
main :: IO()
main = do
a <- getArgs
if (null args)
then do
putStrLn "Invalid number of arguments."
exitWith (ExitFailure 1)
else do
-- The rest of the main function goes here.
, ben iç içe if-then-else
(orijinal Java kodunun her çıkış noktası için bir) çok olacaktır.
Bu örüntüyü Haskell'de uygulamak için daha zarif/deyimsel bir yol var mı? Genel olarak, Java gibi bir zorunlu dilde kullanılan bir erken çıkış/geri dönüşü uygulamak için Haskell deyimsel yolu nedir?
Lütfen http://learnyouahaskell.com/a-fistful-of-monads sayfasından Walking the Line örneğini okuyun. Belki detatype kullanarak Monad örneğini verir. Herhangi bir ifadenin sonucu Hiçbir şey olmadığında, aşağıdaki tüm ifadelerin sonucu, başarısızlık noktasında çıktığınız kadar iyi değildir. –
@ManojR - Belki de başarısızlık sebebini de istediğiniz için burada gerçekten uygun değil. – Lee
Klasik yaklaşım, süreci "güvenilir" bir işleme fonksiyonuna (parametrelerin doğru olduğunu varsayar) ve bir "paranoyak" akıl sağlığı kontrol fonksiyonuna (sadece parametrelerin doğru olup olmadığını kontrol eder) bölüyor ... –