下記ともにhoge.rbと適当に名付けた1ファイル内にすべてのソースを書いています。

Rubyの入れ子のModuleの書き方ですが2通りあるようでして、

module A
  module B
    def hoge
      puts 'hoge'
    end
  end
end

include A::B
hoge #=> hoge

だと問題なく動くのですが、

module A::B
  def hoge
    puts 'hoge'
  end
end

include A::B
hoge

とした場合、

hoge.rb:1:in `<top (required)>': uninitialized constant A (NameError)
    from -e:1:in `load'
    from -e:1:in `<main>'

と出てうまくいきません。なぜなのでしょうか?

ちなみに、Railsを使ったプロジェクト(helpersディレクトリ)でこのように::で繋げた書き方をみましたが、問題なく動いておりました。