2016-03-21 10 views
0

私はこの機能を持っている:Haskellでの文字列連結を簡略化するには?

myF :: String -> String 
myF arg1 = "const" ++ arg1 

は、それを単純化する方法はありますか?私はそれがオペレータ "と関係しているかもしれないと思う。私はここでそれをどのように適用するかを理解できません。

答えて

8

カリー化の魔法:

myF :: String -> String 
myF = (++) "const" 

または(@jamshidhで述べたように)

myF :: String -> String 
myF = ("const" ++) 

説明我々は(++)関数は二つの引数を取ると言う

実際にはHaskellのすべての関数は引数を1つしか取っていません。 (++)関数のシグネチャを見てみましょう:

(++) :: String -> String -> String 

我々は記述することができます(++)、またはそのような演技として「連結」機能:

「1つの文字列とリターンを取ります我々はmyF = (++) "const"を言うときに我々は(++)関数に最初の文字列を適用した結果の機能を割り当てている別の文字列に を連結(合流)2つの文字列を取り、その文字列を返す関数」

myFに機能します。これは"部分的なアプリケーション"として知られています。

myF arg = "const" ++ arg 

我々が原因で部分的に適用される「連結から「引数」を省くことができます。私たちはこのような関数の末尾に引数を含める必要はありませんが、これはまだ完全に罰金です

お知らせ"我々はもう一つの文字列引数を期待していることをすでに知っている。

+1

もちろん、あなたはもちろん、直接( "const" ++) – jamshidh

+0

@jamshidhとしてコードに直接使用することができます!答えにそれを加えた、ありがとう。 –