Haskell - "البيان الأخير في بناء" تفعل "يجب أن يكون تعبيرا"

StackOverflow https://stackoverflow.com/questions/2016963

  •  19-09-2019
  •  | 
  •  

سؤال

كما تقول في العنوان: ماذا يفعل The last statement in a 'do' construct must be an expression تعني؟ انتهى بي do كتلة مع putStrLn مثل ذلك يظهر في العديد من الأمثلة التي رأيتها، وأحصل على خطأ.

شفرة:

main = do args <- getArgs
           file <-readFile "TWL06.txt"
           putStrLn results
هل كانت مفيدة؟

المحلول

معظم الوقت، لأن الكود الخاص بك هو عدم الانحياز ومبرم التحويل البرمجي أن "القيام" قد انتهت قبل الأوان (أو لديه رمز إضافي لا ينتمي بالفعل إلى هناك)

نصائح أخرى

السطر الأخير الخاص بك ليس شيئا مثل someVar <- putStrLn "hello", ، من قبل أي فرصة، هل؟ ستحصل على هذا الخطأ إذا حاولت إجراء ملزمة متغيرة على السطر الأخير، لأنه يعادل putStrLn "Hello" >>= \someVar -> - يتوقع أن يكون هناك تعبير في النهاية.

يمكن أن يؤدي المسافة البادئة غير الصحيحة إلى هذا الخطأ. أيضا، جيد أيضا عدم استخدام علامات التبويب، فقط المساحات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top