0

私はいくつかの哀れなコード行と戦っていますが、問題に頭を悩ませることはできません-何らかの理由で、F# の型システムのこの側面の原則を理解することができず、これまでのところすべての読み取りが機能していません.

私がここで犯している愚かな学生の間違いを誰か指摘してもらえますか? 私はそれを作っていることを知っていますが、私はそれを見ることができません! 私はこれで痛みを伴う初心者の土地から抜け出そうとしているので、なぜこれがうまくいかないのかという完全な原則を理解することが私の目標です - どんな助けも感謝して受け取ります!

これは単純な演習です。実行するためにモナドを実際に必要としない単なる練習ですが、次のプロジェクトでこれらのことを自分のベルトの下に置きたいと思っています。

let stringToInt str = Int32.TryParse(str)

type wk() =
    member this.Bind(f , str) = f str
    member this.Return(f ) = f 

let strInt = new wk()

let test a   =  strInt{let! b  = strInt.Bind a stringToInt 
                   return b}


let x = test  "10"  
printfn "%s" x

私は以下を取得しています:

Program.fs(117,14): error FS0001: This expression was expected to have type
(string -> bool * int) -> ('a -> 'a) -> 'b    
but here has type  string 

更新:以下のヘルプに基づいて、現在これが機能しています:

 open System
 open System.Threading

 let stringToInt str = snd <| Int32.TryParse(str)   


 type wk() =
   member this.Bind(funct, str) =  funct str  
   member this.Return(str) = str

   let strInt = new wk()
   //Jack P syntax!
   let test2 str funct = strInt{
                         let! b = funct str
                         return b
                               }
   let go2 = test2 ("10", stringToInt) |>  printfn "%A"

作業はおそらくまだ概念的にはまだ行われていませんが、印刷する値を取得することはできません。私はハッキングを続けます - 私はたくさんの読書をしました。それが私がエクササイズを得たところですが、コンセプトを得る唯一の方法はそれと戦い続けることだと思います.

私は自分のブログ ( http://richardgriffiths.azurewebsites.net/?p=2332 ) でより単純な形式で成功した ので、型システムで得た構文/概念の障壁を打ち破る必要があるだけです。

4

2 に答える 2