Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
    callmekohei
    @callmekohei
    Ignore warnings about F# metadata.
    ただやはりFsControl2.0.0にしてもエラーになります(^_^;;
    うーん、Mzeroとかいうmoduleがないと。なんのことだろう?
    Screen Shot 2016-05-10 at 14.40.41.png
    bleis-tift
    @bleis-tift
    Mzero・・・
    MZeroだと思うんですよね
    なんでzが小文字・・・
    callmekohei
    @callmekohei
    MZeroとはなんですか???
    こいつです
    そもそも、FsControlにFsControl.Core.TypeMethods.MonadPlusなんてものが無い・・・
    FSharpPlusのバージョンはいくつですか?
    callmekohei
    @callmekohei
    0.0.4です!
    bleis-tift
    @bleis-tift
    あー、なるほど
    1.0.0-CI00018ってバージョンを使ってました
    callmekohei
    @callmekohei
    それをnugetすればいいんですね。やってみます!
    callmekohei
    @callmekohei
    隊長!できましたー!
    Screen Shot 2016-05-10 at 14.51.55.png
    bleis-tift
    @bleis-tift
    よかった!
    callmekohei
    @callmekohei
    ブレイスさんのおかけです!これでモナドを勉強してみます!一応インストールをまとめてみました!
    http://callmekohei00.hatenablog.com/entry/2016/05/10/145727
    bleis-tift
    @bleis-tift
    元のコードの7を6にしちゃってますけど、FSharpPlusを使うとこんな感じでモナドプラスのインスタンスであれば渡せる関数とか作れちゃいます
    open FsControl
    open FSharpPlus
    
    // 足したら6になる場合に中身をタプル化し、
    // それ以外はmzeroを返す関数
    let inline f (a, b, c) =
      monadPlus {
        let! x = a
        let! y = b
        let! z = c
        if x + y + z = 6 then
          return (x, y, z)
      }
    
    // fに同じ引数を渡すだけのラッパー関数
    let inline f2 x = f (x, x, x)
    
    // f2をint listやint optionという継承関係にない型で呼び出している
    let listAll = f2 [1..5]
    let opt1 = f2 None
    let opt2 = f2 (Some 2)
    let opt3 = f2 (Some 3)
    
    [<EntryPoint>]
    let main argv =
      printfn "listAll: %A" listAll
      printfn "opt1: %A" opt1
      printfn "opt2: %A" opt2
      printfn "opt3: %A" opt3
      0
    'a list'a optionもモナドプラスのインスタンスなので、継承関係にないのに渡せる
    callmekohei
    @callmekohei
    ためになります!ありがとうございます!
    callmekohei
    @callmekohei
    ついにできました!ヒントをありがとうございました!うれしいです!!!
    module Test_ListMonad =
    
        type ListBuilder () =
            member x.Bind (l, f) = l |> List.collect f
            member x.Return l = [l]
            member x.Zero () = []
    
        let lb = new ListBuilder()
    
        let listAll =
            lb { let! x = [1..6]
                 let! y = [1..6]
                 let! z = [1..6]
                 if [x + y + z] = [7] then return [x; y; z]
            } 
            |> printfn "%A"
    bleis-tift
    @bleis-tift
    ifの条件、リストにする意味はないのでは?
    あと、戻り値はタプルのリストじゃなくてリストのリストでいいんですか?
    callmekohei
    @callmekohei
    ifの条件x + y + z = 7でいけるんですね。なるほどです!リストのリストでいいです!(^_^)/ 条件変わってすみません、、、。
    This message was deleted
    omanuke
    @omanuke
    PatternMatchでunionの名前とか間違えた時、UpperCaseほにゃららがーと警告は出るんだけどコンパイルは通るのってなんでなんですかね?
    そのパターンマッチにほかのケースあったら型が違うとかでエラーになりそうなんだけど、そもどういう扱いになっている?
    bleis-tift
    @bleis-tift
    名前付きのパターンと認識される感じですね
    omanuke
    @omanuke
    名前付きのパターン・・・
    bleis-tift
    @bleis-tift
    match x with
    | Hoge -> ... // Hogeという変数パターンとして認識
    omanuke
    @omanuke
    んーActivePatternではなく?
    変数パターンとは
    bleis-tift
    @bleis-tift
    対応するActivePatternがあればそっちでしょうけど、なければ変数パターンですね
    match x with
    | y -> ... // 変数パターン(変数名はy)
    omanuke
    @omanuke
    ああ、そういうことか
    いわれてみればそうですね。これたまにやらかすんですよね…警告見ろって話ですが(´・ω・`)
    Yukitoshi Suzuki
    @yukitos
    全然違う話題ですがこのチャンネルの履歴はこちら。
    https://gitter.im/fsugjp/public/archives/all
    Matsushima, Kazuhiro
    @Gab-km
    面白い、ぎっはぶの草で表現してるのか…!
    Kouji Matsui
    @kekyo
    おおーだんだん濃くなってる
    pocketberserker
    @pocketberserker
    これの F# 版を気が向いたらちゃちゃっと作るか http://dwango.github.io/scala_text/typeclass.html
    callmekohei
    @callmekohei
    ペンギンさんに期待😄
    Kouji Matsui
    @kekyo
    :+1:
    pocketberserker
    @pocketberserker
    これ、試してもらったんですけどダメでした><。
    ReSharperが頑張ったのかな・・・?
    残念