Namaran

Code daily. Without assist.

2026-08-22

SafeDivide.hs

safeDivide :: Int -> Int -> Maybe Int
safeDivide _ 0 = Nothing
safeDivide a b = Just (a `div` b)

describe :: Int -> Int -> String
describe a b =
  let Just result = safeDivide a b
  in "Result: " ++ show result

describe 10 0はクラッシュします。何が問題で、どう直せばよいでしょうか?

Answer

let Just result = safeDivide a bは、反駁不可能パターン(irrefutable pattern)としてJust resultにマッチさせようとしています。safeDivide a bNothingを返すと、このパターンマッチは実行時に失敗してクラッシュします。case式で両方のケースを扱うようにしてください: case safeDivide a b of Just result -> ...; Nothing -> ...