module Sum where sum123 :: Int sum123 = sum [1,2,3] $ stack ghc -- -O Sum.hs $ stack ghc -- --show-iface Sum.hi (中略) 1eb3421a20d14a1255f6f5adccf8e3bd sum123 :: GHC.Types.Int {- HasNoCafRefs, Strictness: m, Unfolding: (GHC.Types.I# 6#) -} 今回の記事では、GHCはどのように6を計算しているのか解説します。ポイントはリストリテラルの脱糖と、fold/build変換です。 リストリテラル ghcに-ddump-dsオプションを渡すと脱糖の結果をみることができます。 -Oオプションがない場合、GHCは[1,2,3]を1 : 2: 3 : []に脱糖します。 $ s