Как реализовать шаблон стратегии для возврата структуры, которая объявлена закрытой?
Или перевод ...
Как ограничить создание частной структуры несколькими функциями?
Я хочу реализовать интерпретатор IOlogin и интерпретатор MockLogin для операции входа пользователя в систему. Обе функции должны возвращать значение типа AuthenticatedManager .
Приступая к работе, я хотел определить тип в модуле так:
module Specification =
type AuthenticatedManager = private { Name:string }
Приведенный выше код предназначен для ограничения создания AuthenticatedManager .
Я хочу сослаться на AuthenticatedManager в отдельном модуле:
module Mock =
open Specification
let username = Username "test_manager"
let password = Password "123"
let invalidPassword = Password "invalid password"
let login username' password' : Result<AuthenticatedManager,Username*string> =
if ( username',password') = ( username,password )
then Ok { Name="authenticated manager" } // compile error
else Error ( username',"Failed to login" )
Я знаю, что ошибка компиляции возникла из-за того, что я пытался ссылаться на закрытую структуру вне модуля, в котором я ее объявил. Однако я считаю, что имеет смысл иметь отдельные библиотеки для размещения интерпретаторов для этого типа операций.