Haskell - "البيان الأخير في بناء" تفعل "يجب أن يكون تعبيرا"
سؤال
كما تقول في العنوان: ماذا يفعل 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 ->
- يتوقع أن يكون هناك تعبير في النهاية.
يمكن أن يؤدي المسافة البادئة غير الصحيحة إلى هذا الخطأ. أيضا، جيد أيضا عدم استخدام علامات التبويب، فقط المساحات.
لا تنتمي إلى StackOverflow