2016-08-04 19 views
1

私はこのコードを実行しようとしたたびに、コンパイラは変数redirectUrlGraphEmail、、aboutContentsは「しない範囲で」エラーを返し、staticDirタプルに含まれる変数を定義する方法は?

staticDir <- getStaticDir 
redirectUrlGraphEmail <- retrieveAuthURL testUrl 
redirectUrlGraphPost <- retrieveAuthURL testPostUrl 
aboutContents <- LazyIO.readFile $ markdownPath ++ "README.md" 
privacyContents <- LazyIO.readFile $ markdownPath ++ "PRIVACY.md" 

routes :: [ (String, ServerPart Response)] 
routes = [ 
("graph-fb", seeOther redirectUrlGraphEmail $ toResponse ""), 
("post-fb", seeOther redirectUrlGraphPost $ toResponse ""),    
("about", aboutResponse aboutContents), 
("static", serveDirectory DisableBrowsing [] staticDir)] 

これらの変数がで宣言されています

しかし、私はこれらの行をどこにモジュールに追加するべきかわかりません。どんな助け?

+0

完全な例を1つのファイルに表示できますか?あなたが変数がグローバルなものかそうであると期待しているようです。 –

答えて

4

私はhappstackについてはわかりませんが、あなたの変数redirectUrlGraphEmailなどはあなたのメイン(または少なくともモナドの中のいくつか)に定義されているようですね。そして、モジュール内で別の関数としてrouteを定義したいとします。

事が理由コンパイラである(あなたがmainに(あなたが正確に<-と結合していること)を定義する変数はあなたのmainに対してローカルなので、あなたのプログラムの残りの部分は、それらへのアクセスを持っていない、ありますあなたがroutesでそれらを使用しようとすると、彼らが範囲にないことを伝えます)。

routes redirectUrlGraphEmail redirectUrlGraphPost = [ 
("graph-fb", seeOther redirectUrlGraphEmail $ toResponse ""), 
("post-fb", seeOther redirectUrlGraphPost $ toResponse ""),    
("about", aboutResponse aboutContents), 
("static", serveDirectory DisableBrowsing [] staticDir)] 

そしてあなたが結合してきた変数を使用してmainコールroutesから:あなたがそれらを利用したい場合は、あなたのケースではので、それらをパラメータとして取る関数としてroutesを定義する必要があります。私は意味がありますか?

+0

はい、それは私にはたくさんの意味があります。あなたの説明をありがとう!ここでのもう1つの質問はメインモジュールです。 'routes'は' routes( 'map(\(a、b) - > dir ab)$ routes)'と呼ばれ、 'dir'という関数を' routes '。 'dir'は、タプル内の2つの要素を変数として取ります。どのように私はバインドした変数とメインで 'routes'を呼び出すことと組み合わせることができますか? –

+0

私があなたの質問を正しく理解していれば、引数に 'routes'を適用するだけでよいので、' map(\(a、b) - > dir a b)$ routes redirectUrlGraphEmail redirectUrlGraphPost ... 'と書くことができます。 オリジナルの形式では '$'は必要ないことに注意してください。 'map(\(a、b) - > dir a b)routes'は大丈夫でしょう;) – villou24

+0

私は見る!次に、それらの変数を私のルート関数に追加する必要がありますか? 'ルート:: [(文字列、ServerPart応答)] 経路staticDir redirectUrlGraphEmail redirectUrlGraphPost aboutContents privacyContents = [ ( "グラフ-FB"、seeOther redirectUrlGraphEmail $ toResponse "")のような、 ( "ポストFB"、seeOther redirectUrlGraphPost $ toResponse ( "static"、serveDirectory DisableBrowsing [] staticDir)] –

関連する問題