Comments (3)
Thanks for catching this and thanks for making a PR. I decided to handle this differently and just make the dummy implementations internal as well (which they should be anyway). So I will close the PR, but thanks again!
from domainmodelingmadefunctional.
@kentcb Another option to keep the actual implementation internal is to change module internal OrderTaking.PlaceOrder.Implementation
to module OrderTaking.PlaceOrder.ImplementationTypes
(for all the types that are declared in that file) and then in section 2 where the actual implementation of the various functions takes place, create an internal module called module internal Implementation
(you'll have to define it like so module internal Implementation =
and then indent everything underneath that).
Once you've done that, you just need to change the OrderTaking.PlaceOrder.Api
module to qualify the types with ImplementationTypes
(e.g. ImplementationTypes.CheckedAddress
). You'll also have to change the placeOrderApi
workflow function (at the bottom of the file) to be like so:
let placeOrderApi : PlaceOrderApi =
...
let workflow =
ImplementationTypes.Implementation.placeOrder
This exposes the types as public, but keeps the actual functions using the types as internal.
To answer your question about the compiler improvement, yes, it was a change (in 4.1 I think) to turn that into a compiler error. You can also trigger a similar compiler warning (not error) if you were to leave the code as is and add the following line as a type alias in PlaceOrder.Api:
type CheckAddressExists = Implementation.CheckAddressExists
from domainmodelingmadefunctional.
I've created a PR for this (I guess I did it wrong because it opened a new issue, oops). The PR is issue #17
from domainmodelingmadefunctional.
Related Issues (14)
- Where is the code? HOT 1
- fail to build on ubuntu HOT 2
- Question: Is there a complete implementation including persistence and serialization? HOT 2
- Question: is it still the recommended way to do dependency parameterization? HOT 2
- Domain Modelling Made Functional Book HOT 3
- How to read CheckedAddress from a data store
- Use binding in an asyncResult computation expression HOT 7
- Noticed Differences, so just want to clarify the things
- An compilling exemplo in .net 6
- asyncResult not working HOT 3
- Porting to .NET Core/Standard HOT 11
- AsyncResult.catch don't work as expected HOT 4
- How to interact with presistent? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from domainmodelingmadefunctional.