関数のパラメータとして機能する関数値を呼び出すにはどうすればよいですか?関数のパラメータとして機能する関数値を呼び出すにはどうすればよいですか?
具体的には、私の目標は、パラメータが実際に関数である関数のパラメータを利用することです。
私の場合、データを記録するためのインターフェイスを実装しようとしています。
は、ここに私のコードです:
let logToFile (filePath:string) (message:string) =
let file = new System.IO.StreamWriter(filePath)
file.WriteLine(message)
file.Close()
let makeInitialDeposit deposit =
let balance = deposit |> insert []
sprintf "Deposited: %f" balance
let logDeposit deposit (log:'medium ->'data -> unit) =
deposit |> makeInitialDeposit
|> log
注次の関数:
let logDeposit deposit (log:'medium ->'data -> unit) =
deposit |> makeInitialDeposit
|> log
私は、ログ機能のコンパイルエラーを取得:
この原因を構築します指示よりも一般的でないコードタイプ注釈の タイプ変数 'medium'は タイプ 'string'に制限されています。
私はmakeInitialDepositが文字列を返すと理解します。 しかし、その文字列型はジェネリック型のデータにマップされます。 したがって、ジェネリックはどんなタイプのものでも構いませんか?
私はその後、培地(すなわちファイル)の引数を供給しようとした:
let logDeposit deposit (log:'medium ->'data -> unit) medium =
deposit |> makeInitialDeposit
|> log medium
その後、私のエラーはにアップデートしまった:この構築物は、コードが示されているよりも、一般的なことになり
タイプ注釈の 型変数 'dataは 型' string 'に制限されています。
私の目標
最終的に、私は、ログと呼ばれるインタフェースを持っており、そのインターフェイス(すなわちlogToFile)の実装に渡したいです。
最初の解釈に基づいてコンパイルエラーをどのように解釈するべきかに関するガイダンスはありますか?
挿入機能の依存関係
let getBalance coins =
coins |> List.fold (fun acc d -> match d with
| Nickel -> acc + 0.05
| Dime -> acc + 0.10
| Quarter -> acc + 0.25
| OneDollarBill -> acc + 1.00
| FiveDollarBill -> acc + 5.00) 0.00
let insert balance coin =
coin::balance |> getBalance
ありがとうございました。私は、セミコロンの挿入と削除の実装を追加しました。 –