リスト内包表記を使わずに書くなら

[code]

    hoge n = [(x,y) | x <- [-n .. n], y <- [-n .. n]]
    
[/code]

この関数をリスト内包表記を使わずに書くなら、どう書けますか？




リストをアプリカティブとして使うなら

[code]

    hoge n = (\x y -> (x,y)) <$> [-n .. n] <*> [-n .. n]
    
[/code]

モナドとして使うなら

[code]

    hoge n = do x <- [-n .. n]
                y <- [-n .. n]
                return (x,y)
    
[/code]

と書けます。

