Skip to content

Commit

Permalink
Merge commit 'c22448cb3755b2df1e15d8ad5f0f15635ac5914e' into feature/…
Browse files Browse the repository at this point in the history
…Convert_Option_to_Result

Conflicts:
	src/Chessie/ErrorHandling.fs
	tests/Chessie.CSharp.Test/ExtensionsTests.cs
  • Loading branch information
Leif Battermann committed Jan 17, 2016
2 parents 6b9a4d8 + c22448c commit da1620f
Show file tree
Hide file tree
Showing 14 changed files with 155 additions and 97 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,5 @@ paket-files
docs/content/license.md
docs/content/release-notes.md
*.bak
docs/tools/FSharp.Formatting.svclog
.fake
4 changes: 2 additions & 2 deletions build.cmd
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,6 @@ if errorlevel 1 (

IF NOT EXIST build.fsx (
.paket\paket.exe update
packages\FAKE\tools\FAKE.exe init.fsx
packages\build\FAKE\tools\FAKE.exe init.fsx
)
packages\FAKE\tools\FAKE.exe build.fsx %*
packages\build\FAKE\tools\FAKE.exe build.fsx %*
6 changes: 3 additions & 3 deletions build.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// FAKE build script
// --------------------------------------------------------------------------------------

#r @"packages/FAKE/tools/FakeLib.dll"
#r @"packages/build/FAKE/tools/FakeLib.dll"

open Fake
open Fake.Git
Expand All @@ -12,7 +12,7 @@ open System
open System.IO
#if MONO
#else
#load "packages/SourceLink.Fake/tools/Fake.fsx"
#load "packages/build/SourceLink.Fake/tools/Fake.fsx"
open SourceLink
#endif

Expand Down Expand Up @@ -304,7 +304,7 @@ Target "ReleaseDocs" (fun _ ->
Branches.push tempDocsDir
)

#load "paket-files/fsharp/FAKE/modules/Octokit/Octokit.fsx"
#load "paket-files/build/fsharp/FAKE/modules/Octokit/Octokit.fsx"
open Octokit

Target "Release" (fun _ ->
Expand Down
8 changes: 4 additions & 4 deletions build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ then
fi

[ ! -e build.fsx ] && .paket/paket.exe update
[ ! -e build.fsx ] && packages/FAKE/tools/FAKE.exe init.fsx
packages/FAKE/tools/FAKE.exe $@ --fsiargs -d:MONO build.fsx
[ ! -e build.fsx ] && packages/build/FAKE/tools/FAKE.exe init.fsx
packages/build/FAKE/tools/FAKE.exe $@ --fsiargs -d:MONO build.fsx
else
# use mono
mono .paket/paket.bootstrapper.exe
Expand All @@ -33,6 +33,6 @@ else
fi

[ ! -e build.fsx ] && mono .paket/paket.exe update
[ ! -e build.fsx ] && mono packages/FAKE/tools/FAKE.exe init.fsx
mono packages/FAKE/tools/FAKE.exe $@ --fsiargs -d:MONO build.fsx
[ ! -e build.fsx ] && mono packages/build/FAKE/tools/FAKE.exe init.fsx
mono packages/build/FAKE/tools/FAKE.exe $@ --fsiargs -d:MONO build.fsx
fi
7 changes: 3 additions & 4 deletions docs/tools/generate.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,8 @@ let info =
// For typical project, no changes are needed below
// --------------------------------------------------------------------------------------

#I "../../packages/FAKE/tools/"
#load "../../packages/FSharp.Formatting/FSharp.Formatting.fsx"
#r "NuGet.Core.dll"
#I "../../packages/build/FAKE/tools/"
#load "../../packages/build/FSharp.Formatting/FSharp.Formatting.fsx"
#r "FakeLib.dll"
open Fake
open System.IO
Expand All @@ -46,7 +45,7 @@ let content = __SOURCE_DIRECTORY__ @@ "../content"
let output = __SOURCE_DIRECTORY__ @@ "../output"
let files = __SOURCE_DIRECTORY__ @@ "../files"
let templates = __SOURCE_DIRECTORY__ @@ "templates"
let formatting = __SOURCE_DIRECTORY__ @@ "../../packages/FSharp.Formatting/"
let formatting = __SOURCE_DIRECTORY__ @@ "../../packages/build/FSharp.Formatting/"
let docTemplate = formatting @@ "templates/docpage.cshtml"

// Where to look for *.csproj templates (in this order)
Expand Down
27 changes: 19 additions & 8 deletions paket.dependencies
Original file line number Diff line number Diff line change
@@ -1,11 +1,22 @@
source https://nuget.org/api/v2

nuget FSharp.Core redirects:force

group Build

nuget FSharp.Formatting
nuget NUnit
nuget NUnit.Runners
nuget FAKE
nuget SourceLink.Fake
nuget FSharp.Core
source https://nuget.org/api/v2

nuget FSharp.Formatting
nuget FAKE
nuget SourceLink.Fake

github fsharp/FAKE modules/Octokit/Octokit.fsx

group Test

github fsharp/FAKE modules/Octokit/Octokit.fsx
github forki/FsUnit FsUnit.fs
source https://nuget.org/api/v2

nuget NUnit ~> 2
nuget NUnit.Runners ~> 2

github forki/FsUnit FsUnit.fs
42 changes: 26 additions & 16 deletions paket.lock
Original file line number Diff line number Diff line change
@@ -1,30 +1,40 @@
NUGET
remote: https://nuget.org/api/v2
remote: https://www.nuget.org/api/v2
specs:
FAKE (3.35.4)
FSharp.Compiler.Service (0.0.90)
FSharp.Core (3.1.2.1)
FSharp.Formatting (2.9.10)
FSharp.Compiler.Service (>= 0.0.87)
FSharpVSPowerTools.Core (1.8.0)
FSharpVSPowerTools.Core (1.8.0)
FSharp.Compiler.Service (>= 0.0.87)
FSharp.Core (4.0.0.1) - redirects: force

GROUP Build
NUGET
remote: https://www.nuget.org/api/v2
specs:
FAKE (4.12.0)
FSharp.Compiler.Service (1.4.2.3)
FSharp.Formatting (2.13.0)
FSharp.Compiler.Service (>= 1.4.2 < 1.5.0)
FSharpVSPowerTools.Core (>= 2.2.0 < 2.3.0)
FSharpVSPowerTools.Core (2.2.0)
FSharp.Compiler.Service (>= 1.4.2.0)
Microsoft.Bcl (1.1.10)
Microsoft.Bcl.Build (>= 1.0.14)
Microsoft.Bcl.Build (1.0.21)
Microsoft.Bcl.Build (1.0.21) - import_targets: false
Microsoft.Net.Http (2.2.29)
Microsoft.Bcl (>= 1.1.10)
Microsoft.Bcl.Build (>= 1.0.14)
NUnit (2.6.4)
NUnit.Runners (2.6.4)
Octokit (0.13.0)
Octokit (0.17.0)
Microsoft.Net.Http
SourceLink.Fake (0.5.0)
SourceLink.Fake (1.1.0)
GITHUB
remote: fsharp/FAKE
specs:
modules/Octokit/Octokit.fsx (98d8f2e57e8f9972703d4237dd62f8e13d6b8d7d)
modules/Octokit/Octokit.fsx (7d1a6f8e48d1e2e1e3246ea24a4de05cccc8ce64)
Octokit
GROUP Test
NUGET
remote: https://www.nuget.org/api/v2
specs:
NUnit (2.6.4)
NUnit.Runners (2.6.4)
GITHUB
remote: forki/FsUnit
specs:
FsUnit.fs (81d27fd09575a32c4ed52eadb2eeac5f365b8348)
FsUnit.fs (ddee2d57be2afd2b5a0327b87dd5b8d1dea947ce)
25 changes: 13 additions & 12 deletions src/Chessie/Chessie.fsproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@
<Tailcalls>false</Tailcalls>
<OutputPath>..\..\bin</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<WarningLevel>3</WarningLevel>
<WarningLevel>5</WarningLevel>
<DocumentationFile>..\..\bin\Chessie.xml</DocumentationFile>
<OtherFlags>--warnon:1182</OtherFlags>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
Expand Down Expand Up @@ -75,37 +76,37 @@
<Reference Include="System.Numerics" />
</ItemGroup>
<Choose>
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6')">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v2.0' Or $(TargetFrameworkVersion) == 'v3.0' Or $(TargetFrameworkVersion) == 'v3.5')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll</HintPath>
<HintPath>..\..\packages\FSharp.Core\lib\net20\FSharp.Core.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == 'MonoAndroid'">
<When Condition="$(TargetFrameworkIdentifier) == '.NETFramework' And ($(TargetFrameworkVersion) == 'v4.0' Or $(TargetFrameworkVersion) == 'v4.5' Or $(TargetFrameworkVersion) == 'v4.5.1' Or $(TargetFrameworkVersion) == 'v4.5.2' Or $(TargetFrameworkVersion) == 'v4.5.3' Or $(TargetFrameworkVersion) == 'v4.6' Or $(TargetFrameworkVersion) == 'v4.6.1')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\packages\FSharp.Core\lib\MonoAndroid\FSharp.Core.dll</HintPath>
<HintPath>..\..\packages\FSharp.Core\lib\net40\FSharp.Core.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="$(TargetFrameworkIdentifier) == 'MonoTouch'">
<When Condition="($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkIdentifier) == 'Xamarin.Mac') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile44')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\packages\FSharp.Core\lib\MonoTouch\FSharp.Core.dll</HintPath>
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+netcore45\FSharp.Core.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
</ItemGroup>
</When>
<When Condition="($(TargetFrameworkIdentifier) == '.NETCore') Or ($(TargetFrameworkProfile) == 'Profile7') Or ($(TargetFrameworkProfile) == 'Profile44')">
<When Condition="($(TargetFrameworkIdentifier) == 'MonoAndroid') Or ($(TargetFrameworkIdentifier) == 'MonoTouch') Or ($(TargetFrameworkIdentifier) == 'Xamarin.iOS')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+netcore45+MonoAndroid1+MonoTouch1\FSharp.Core.dll</HintPath>
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+monoandroid10+monotouch10+xamarinios10\FSharp.Core.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
Expand All @@ -114,7 +115,7 @@
<When Condition="($(TargetFrameworkIdentifier) == 'Silverlight' And $(TargetFrameworkVersion) == 'v5.0') Or ($(TargetFrameworkProfile) == 'Profile24') Or ($(TargetFrameworkProfile) == 'Profile47')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+sl5+netcore45+MonoAndroid1+MonoTouch1\FSharp.Core.dll</HintPath>
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+sl5+netcore45\FSharp.Core.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
Expand All @@ -123,7 +124,7 @@
<When Condition="($(TargetFrameworkIdentifier) == 'WindowsPhone' And ($(TargetFrameworkVersion) == 'v8.0' Or $(TargetFrameworkVersion) == 'v8.1')) Or ($(TargetFrameworkProfile) == 'Profile31') Or ($(TargetFrameworkProfile) == 'Profile49') Or ($(TargetFrameworkProfile) == 'Profile78')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+netcore45+wp8+MonoAndroid1+MonoTouch1\FSharp.Core.dll</HintPath>
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+netcore45+wp8\FSharp.Core.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
Expand All @@ -132,7 +133,7 @@
<When Condition="($(TargetFrameworkIdentifier) == 'WindowsPhoneApp') Or ($(TargetFrameworkProfile) == 'Profile32') Or ($(TargetFrameworkProfile) == 'Profile84') Or ($(TargetFrameworkProfile) == 'Profile111') Or ($(TargetFrameworkProfile) == 'Profile151') Or ($(TargetFrameworkProfile) == 'Profile157') Or ($(TargetFrameworkProfile) == 'Profile259')">
<ItemGroup>
<Reference Include="FSharp.Core">
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+netcore45+wpa81+wp8+MonoAndroid1+MonoTouch1\FSharp.Core.dll</HintPath>
<HintPath>..\..\packages\FSharp.Core\lib\portable-net45+netcore45+wpa81+wp8\FSharp.Core.dll</HintPath>
<Private>True</Private>
<Paket>True</Paket>
</Reference>
Expand Down
15 changes: 7 additions & 8 deletions src/Chessie/ErrorHandling.fs
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ module Trial =
let inline apply wrappedFunction result =
match wrappedFunction, result with
| Ok(f, msgs1), Ok(x, msgs2) -> Ok(f x, msgs1 @ msgs2)
| Bad errs, Ok(_, msgs) -> Bad(errs)
| Ok(_, msgs), Bad errs -> Bad(errs)
| Bad errs, Ok(_, _msgs) -> Bad(errs)
| Ok(_, _msgs), Bad errs -> Bad(errs)
| Bad errs1, Bad errs2 -> Bad(errs1 @ errs2)

/// If the wrapped function is a success and the given result is a success the function is applied on the value.
Expand Down Expand Up @@ -205,6 +205,7 @@ module Trial =
let trial = TrialBuilder()

/// Represents the result of an async computation
[<NoComparison;NoEquality>]
type AsyncResult<'a, 'b> =
| AR of Async<Result<'a, 'b>>

Expand Down Expand Up @@ -318,7 +319,7 @@ type ResultExtensions () =
[<Extension>]
static member inline Flatten(this) : Result<seq<'TSuccess>,'TMessage>=
match this with
| Result.Ok(values:Result<'TSuccess,'TMessage> seq, msgs:'TMessage list) ->
| Result.Ok(values:Result<'TSuccess,'TMessage> seq, _msgs:'TMessage list) ->
match collect values with
| Result.Ok(values,msgs) -> Ok(values |> List.toSeq,msgs)
| Result.Bad(msgs:'TMessage list) -> Bad msgs
Expand All @@ -335,9 +336,7 @@ type ResultExtensions () =
/// Otherwise the exisiting failure is propagated.
[<Extension>]
static member inline SelectMany (this:Result<'TSuccess, 'TMessage>, func: Func<_,_>, mapper: Func<_,_,_>) =
let mapper = lift2 (fun a b -> mapper.Invoke(a,b))
let v = bind func.Invoke this
mapper this v
bind (fun s -> s |> func.Invoke |> lift (fun v -> mapper.Invoke(s,v))) this

/// Lifts a Func into a Result and applies it on the given result.
[<Extension>]
Expand All @@ -354,14 +353,14 @@ type ResultExtensions () =
[<Extension>]
static member inline SucceededWith(this:Result<'TSuccess, 'TMessage>) : 'TSuccess =
match this with
| Result.Ok(v,msgs) -> v
| Result.Ok(v,_msgs) -> v
| Result.Bad(msgs) -> failwithf "Result was an error: %s" (String.Join(Environment.NewLine, msgs |> Seq.map (fun x -> x.ToString())))

/// Joins two results.
/// If both are a success the resultSelector Func is applied to the values and the existing success messages are propagated.
/// Otherwise the exisiting error messages are propagated.
[<Extension>]
static member inline Join (this: Result<'TOuter, 'TMessage>, inner: Result<'TInner, 'TMessage>, outerKeySelector: Func<'TOuter,'TKey>, innerKeySelector: Func<'TInner, 'TKey>, resultSelector: Func<'TOuter, 'TInner, 'TResult>) =
static member inline Join (this: Result<'TOuter, 'TMessage>, inner: Result<'TInner, 'TMessage>, _outerKeySelector: Func<'TOuter,'TKey>, _innerKeySelector: Func<'TInner, 'TKey>, resultSelector: Func<'TOuter, 'TInner, 'TResult>) =
let curry func = fun a b -> func (a, b)
curry resultSelector.Invoke
<!> this
Expand Down
Loading

0 comments on commit da1620f

Please sign in to comment.