ファイルストアの状況を書き下すとはどういうことか
全てのノードについて接続している名前付きエッジを書き下すということ
パスの集合として書き下す
パスはノードIDとエッジ名のリストである
パスはノードIDを一つまたは二つ含む
[nodeId_1, edgeName_1, edgeName_2, ..., edgeName_n]
[edgeName_1, edgeName_2, nodeId_2, edgeName_3]
という設計を考えてみたが、途中にnodeIdが来るのはあまりきれいじゃないなと思った。
ノードIDとエッジ名はどちらも文字列であったほうが便利。
ノードIDは絶対URI
エッジ名は文字列
という設計を考えてみたが、文字列で判定するのは混乱するので良くないなと思った。
code:test.hs
newtype NodeId = NodeId String
newtype EdgeName = EdgeName String
data Path = Path {
begin :: Maybe NodeId,
end :: Maybe NodeId,
}
code:uri_parser.hs
import Text.Regex.TDFA ((=~))
import Data.Maybe (listToMaybe)
type UriComponents = (String, String, Maybe String, Maybe String)
isValidUri :: String -> Maybe UriComponents
isValidUri uri = listToMaybe [ (scheme, hierPart, processQuery query, processFragment fragment)
| (_, _, _, scheme:hierPart:queryMarker:query:fragmentMarker:fragment:_) <- uri =~ uriPattern ] uriPattern :: String
processQuery :: String -> Maybe String
processQuery "" = Nothing -- クエリマーカーがあるがクエリが空の場合
processQuery q = Just q
processFragment :: String -> Maybe String
processFragment "" = Nothing -- フラグメントマーカーがあるがフラグメントが空の場合
processFragment f = Just f
関連ページ